如何让2个线程按照先后顺序执行n次呢?
如:线程A从用户输入得到值后存入全局变量num,此时线程B取走此值并且累加,总共执行n(5)次,完成后输出和
<很有意思的问题,在基本忘掉了所以线程同步方法(只记得mutex,和基本信号量原理)的情况下,考虑为什么2个mutex不能实现?>
我认为的原因:
mutex不能决定进程A还是进程B谁先执行(而信号量初始化的时候可以控制状态),对于临界区2者功能一样
2个信号量实现:
#include <me.h>
void* readin(void*);
void* addnum(void*);
int num = 0,temp;
sem_t a;
sem_t b;
int main()
{
pthread_t pthreada,pthreadb;
sem_init(&a,0,1);
sem_init(&b,0,0);
pthread_create(&pthreada,NULL,readin,NULL);
pthread_create(&pthreadb,NULL,addnum,NULL);
pthread_join(pthreada,NULL);
pthread_join(pthreadb,NULL);
sem_destroy(&a);
sem_destroy(&b);
printf("结果是:%d\n",num);
return 0;
}
//通过信号量使得按照顺序执行
void* readin(void *arg)
{
for (int i=0; i<5; i++)
{
sem_wait(&a);
printf("请输入值: \n");
scanf("%d",&temp);
sem_post(&b);
}
}
void* addnum(void* arg)
{
for (int i=0; i<5; i++)
{
sem_wait(&b);
num += temp;
sem_post(&a);
}
}
A临界区执行结束使得进程B解除阻塞,B临界区执行结束使得A解除阻塞