c语言 - 系统V信号量中没有像sem_wait这样的函数吗?



我正在制作单向聊天程序。但在客户端程序中,它工作得很快,所以它向我显示了很多文本。所以我使用System V信号量,但它不能使用sem_wait我应该使用POSIX信号量来像sem_wait一样使用吗?

我不会写睡眠。因为我必须单独发送大量的文件。

是的,有…,但当信号量减少到0以下时,就会发生这种情况。Sys V信号量是Dijkstra信号量的一个变体,在该变体中,您可以按原子顺序对一组信号量进行一组操作,因此,如果其中任何一个信号量阻塞了您请求的操作,您将等待。正如你可能知道的,当你将信号量的值e递减到0以下时,信号量会等待(阻塞(,只有当它再次上升到0以上时,它才会允许阻塞的进程通过,该操作将等于按顺序对P((的N次调用(并且原子性地,如Unix内核所保证的(增量操作等效于V((Dijkstra的调用,并且也是以原子方式完成的。内核还维护一个进程对一个信号量所做的净额,以便撤消该进程对信号量所执行的所有操作,以防该进程死亡。

我想这已经回答了你的问题。

对System V IPC信号量集进行操作的函数是semop()。如果信号量集有多个成员,它可以在单个调用中同时执行等待和信号操作。

macOS手册上写着:

#include <sys/sem.h>
int semop(int semid, struct sembuf *sops, size_t nsops);

说明semop()系统调用在semid指示的信号量集上原子地执行sops指示的操作阵列。CCD_ 5的长度由CCD_。每个操作都编码在struct sembuf中,定义如下:

struct sembuf {
u_short sem_num;        /* semaphore # */
short   sem_op;         /* semaphore operation */
short   sem_flg;        /* operation flags */
};

它继续详细说明行为。

最新更新