用下面这个代码的案例改成并发执行
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
int counter=0;
void *p1(void *param);
void *p2(void *param);
int main(){
pthread_t tid1, tid2;
pthread_attr_t attr1,attr2;
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
pthread_create(&tid1,&attr1,p1,NULL);
pthread_join(tid1,NULL);
pthread_create(&tid2,&attr2,p2,NULL);
pthread_join(tid2,NULL);
printf("counter=%d\n",counter);
return 0;
}
void *p1(void *param){
int i;
for (i=0;i<10;i++){
int icopy=counter;
sleep(1);
icopy++;
sleep(1);
counter=icopy;
}
}
void *p2(void *param){
int i;
for (i=0;i<10;i++){
int icopy=counter;
sleep(1);
icopy++;
sleep(1);
counter=icopy;
}
}
pthread_create(&tid1,&attr1,p1,NULL);
pthread_join(tid1,NULL);
pthread_create(&tid2,&attr2,p2,NULL);
pthread_join(tid2,NULL);
// 修改如下
pthread_create(&tid1,&attr1,p1,NULL);
pthread_create(&tid2,&attr2,p2,NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
LINUX线程本来就是并发的呀。
你的意思是不是线程同步?就是A B两个线程依次循环进行?
如果是的话,使用下面的函数:
pthread_cond_wait
pthread_cond_signal
具体用法直接百度,很多。
如果不是的话,当我没说。