#include<semaphore.h>
sem_t abc //申请一个叫abc的semaphore变量
int sem_init (sem_t *sem, int pshared, unsigned int value); // 初始化;第一个参数即为要初始化的sem_t变量,第二个参数为0即表示为当前进程的局部信号量,不应用于其 他进程,第三个即为信号量初值设置
首先需要用sem_init(); 初始化sem_t型变量,并设置初始信号量。比如设置为1即变为互斥锁; 调用sem_wait(sem_t *); 信号量减一,即P操作
调用sem_post(sem_t *); 信号量加一,即V操作
当信号量为0时,调用sem_wait(); 函数阻塞,等待信号量 >0 时,才进行。
#include<semaphore.h> #include<stdio.h> #include<pthread.h> using namespace std; sem_t abc1; //设置为10 sem_t abc2; //设置为0 sem_t mutex; //互斥变量,设为1 int num=0; void* tprocess1(void* args) { while(1){ sem_wait(&abc1); sem_wait(&mutex); num++; printf("跑出%d只兔兔\n",num); sem_post(&mutex); sem_post(&abc2); } return NULL; } void* tprocess2(void* args) { while(1){ sem_wait(&abc2); sem_wait(&mutex); printf("亲一下,一只兔兔满足的走了\n"); num--; printf("还剩%d只兔兔\n",num); sem_post(&mutex); sem_post(&abc1); } return NULL; } int main() { pthread_t t1; pthread_t t2; sem_init(&abc1,0,10); sem_init(&abc2,0,0); sem_init(&mutex,0,1); pthread_create(&t1,NULL,tprocess1,NULL); pthread_create(&t2,NULL,tprocess2,NULL); pthread_join(t1,NULL); pthread_join(t2,NULL); return 0; }