初探 程序通訊與執行緒同步

2021-07-13 07:04:14 字數 1351 閱讀 1790

不推薦使用signal()介面, 推薦使用sigacton();

相關介面:

訊號集處理函式:

int sigemptyset(sigset_t set);

int sigfillset(sigset_t set);

int sigdelset(sigset_t set, int signo);

int sigmember(sigset_t set, int signo);

int sigprocmask(int how, const sigset_t *set, sigset_t *oset);

int sigpending(sigset_t *set);

int sigsuspend(const sigset_t *sigmask);

管道 int pclose(file *stream_to_close);

int pipe(int file_descriptor[2]);

使用檔案描述符時用底層的read()和write()來訪問資料;

使用檔案流時用fread()和fwrite()訪問資料;

i/o重定向

訊號量偽碼:

圖示:

相關介面:

int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);

int semctl(int sem_id, int sem_num, int command, …)

共享記憶體

void *shmat(int shmid, const void *shmaddr, int shm***);

int shmdt(const void *shmaddr);

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

資訊佇列

int msgctl(int msqid, int cmd, struct msqid_ds *buf);

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msg***);

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msg***);

互斥量(和二進位制訊號量類似)

訊號量

int sem_wait(sem_t *sem);

int sem_post(sem_t *sem);

int sem_destroy(sem_t *sem)

事件第二遍的時候補**,必要時開新文

程序間通訊與多執行緒同步

常見的程序間通訊方式包括 管道 pipe 共享記憶體 sharedmemory 訊息佇列 messagequeue 訊號量 semaphore socket 套接字 常見的多執行緒同步方式主有 是臨界區 critical section 互斥鎖 mutex 訊號量 semaphore 事件 even...

程序通訊與程序同步

多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...

程序間通訊 執行緒同步 概要

關鍵區域。訪問的資源。叫臨界資源,比方印表機。訪問臨界資源的 叫臨界 區域。critical section物件沒有控制代碼,不能被其它執行緒共享。執行緒同步之 critical section 相互排斥量。mutex物件有控制代碼。所以也可用於不同程序的執行緒之間做同步。mutex有超時等待機制。...