1.将一个串行执行的多线程改成并发执行,不知道自己这样改对不对,如有错误请多多指教,谢谢各位大佬。
2.附上两个代码(串行执行和并发执行):
#include <pthread.h>
#include <stdio.h>
#include <stdlib.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;
}
}
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int counter = 0;
int i;
void *p1(void *param);
void *p2(void *param);
int main(int argc,char **argv)
{
int rank;
pthread_t tid1, tid2;
pthread_attr_t attr1, attr2;
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
if(tid1 == 0)
{
pthread_create(&tid1,&attr1,p1,NULL);
pthread_join(tid1,NULL);
}
else if(tid1 != -1)
{
pthread_create(&tid2,&attr2,p2,NULL);
pthread_join(tid2,NULL);
printf("counter = %d\n",counter);
if(tid2 == 0)
{
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;
}
}