信号量是一种在多线程/进程编程中用于同步和互斥的机制,是一个与队列有关的整型变量,你可以把它想象成一个数后面拖着一条排队的队列,如图:
那信号量上面值n
n>0:当前有可用资源,可用资源数量为n
n=0:资源都被占用,可用资源数量为0
n<0:资源都被占用,并且还有n个进程正在排队
信号量拖着的那个队列就是用来放正在排队想要使用这一资源的进程
在C语言中,可以使用信号量来控制对共享资源的访问,以避免数据竞争和冲突。C语言中的信号量通常使用sem_t类型来表示,并通过一些相关的函数来进行初始化、操作和销毁。
1. sem_init:用于初始化信号量。它接受一个指向sem_t变量的指针、一个整数值(表示初始信号量的计数器)以及一个标志(通常为0)作为参数。
2. sem_wait:用于尝试获取信号量。如果信号量计数器大于0,则会将计数器减1,并立即返回。如果计数器为0,则会阻塞当前线程/进程,直到信号量计数器大于0。
3. sem_post:用于释放信号量。它将信号量计数器加1,并唤醒可能正在等待该信号量的其他线程/进程。
4. sem_destroy:用于销毁信号量。它释放与信号量相关的资源。