0
点赞
收藏
分享

微信扫一扫

Linux线程同步互斥量

g++编译时需要g++ my.cpp -pthread

#include <pthread.h>
#include <semaphore.h>
int num1 = 0;
sem_t sem1;
sem_t sem2;

void* pthread_inc1(void* p)
{
for (int i = 0; i < 100000; i++) {
sem_wait(&sem2);//当信号量信号量是0时会阻塞,大于0则会通过,并将信号量减1
num1++;
sem_post(&sem1); //使信号量+1
}
return NULL;
}
void* pthread_dec1(void* p)
{
for (int i = 0; i < 100000; i++) {
sem_wait(&sem1);//
num1--;
sem_post(&sem2);
}
return NULL;
}
int int() {
sem_init(&sem1, 0, 0);//参数三设置开始状态0
sem_init(&sem2, 0, 1);//参数三设置开始状态为1,参数三能一定程度上影响线程开始
pthread_t pid[50];
for (int i = 0; i < 50; i++) {
if (i % 2) pthread_create(&pid[i], NULL, pthread_inc1,NULL);
else pthread_create(&pid[i], NULL, pthread_dec1, NULL);
}
for (int i = 0; i < 50; i++) {
pthread_join(pid[i], NULL);
}
std::cout << num1 << std::endl;
sem_destroy(&sem1);
sem_destroy(&sem2);
return 0;
}


举报

相关推荐

0 条评论