消息队列:
信号量:
使用:头文件<semaphore.h>
- 定义信号量:全局变量位置——sem_t sem;
- 释放:sem_destory(&sem);
- 初始化:sem_init(&sem, 0, 1);
初始化信号量:
第二个参数写为0,表示这个进程只能再当前进程使用
第三个:既然是计数器,就有初始值,这里设为 1
- 分别进行 p,v 操作:
p 操作:sem_wait(&sem);
v 操作:sem_post(&sem);
代码示例:
#include <stdio.h> //同步互斥不一定非要用互斥锁和条件变量 //信号量:就是一个计数器,表示资源的个数。 //p 申请资源,计数 - 1 //v 释放资源,计数器 + 1 //当计数器是 0,再去 p 操作就会阻塞 //初始化信号量: #include <semaphore.h> //信号量头文件 sem_t sem; int main() { //初始化信号量 //第二个参数写为0,表示这个进程只能再当前进程使用 //第三个:既然是计数器,就有初始值,这里设为1 sem_init(&sem, 0, 1); //分别进行 p,v 操作 //p sem_wait(&sem); printf("P 操作一次!\n"); sem_wait(&sem); printf("P 操作一次!\n");//第二次就不会打印,因为开始设置的资源是 1。 //v sem_post(&sem); sem_destory(&sem); return 0; }
结果就会打印一次:P 操作一次!
第二次就不会打印,因为开始设置的资源是 1。