C++ 同步

来源:互联网 发布:jsp解析json字符串 编辑:程序博客网 时间:2024/04/30 00:58

#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;}




0 0