如何让2个线程按照先后顺序执行n次呢?
如:线程A从用户输入得到值后存入全局变量num,此时线程B取走此值并且累加,总共执行n(5)次,完成后输出和
<很有意思的问题,在基本忘掉了所以线程同步方法(只记得mutex,和基本信号量原理)的情况下,考虑为什么2个mutex不能实现?>
我认为的原因:
mutex不能决定进程A还是进程B谁先执行(而信号量初始化的时候可以控制状态),对于临界区2者功能一样
2个信号量实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #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解除阻塞