#include
#include
#include
#include
#include
pthread_mutex_t mutex;
char buf[50];
void * start_routine (void * arg)
{
printf(“I am child pthread0 get para %d\n”,*(int *)arg);
int b = 1001;
pthread_mutex_lock(&mutex);
*(int )arg = b;
//pthread_mutex_unlock(&mutex);
int i = 0;
for(;i<50;i++)
{
usleep(rand()%3);
buf[i] = ‘0’;
}
pthread_mutex_unlock(&mutex);
//pthread_exit(&b);
return NULL;
}
void * start_routine1 (void * arg)
{
printf(“I am child pthread1 get para %d\n”,(int *)arg);
int b = 1002;
pthread_mutex_lock(&mutex);
//*(int *)arg = b;
// pthread_mutex_unlock(&mutex);
int i = 0;
for(;i<50;i++)
{ usleep(rand()%3);buf[i] = '1';
}
pthread_mutex_unlock(&mutex);
//*(int *)arg = b;
//pthread_exit(&b);
return NULL;
}
int main(int argc, const char * argv[])
{
pthread_mutex_init(&mutex, NULL);
pthread_attr_t *attr;
int a = 9;
pthread_t thread[2]; //多线程一定要定义成数组
//int ret1 = pthread_create(&thread[1], NULL,start_routine1, (void*)&a);
int ret = pthread_create(&thread[0], NULL,start_routine, (void*)&a);
int ret1 = pthread_create(&thread[1], NULL,start_routine1, (void*)&a);
if(ret != 0 || ret1 != 0 )
{printf("pthread_create fail\n");
}
ret = pthread_detach(thread[0]);
ret1 = pthread_detach(thread[1]);
// if(ret != 0 || ret1 != 0)
// {
// printf("pthread_detach fail\n");
// }
ret = pthread_join(thread[0], NULL);//pthread_join会让主线程等待子线程执行
ret1 = pthread_join(thread[1], NULL);//pthread_join会让主线程等待子线程执行
if(ret != 0 || ret1 != 0)
{perror("pthread_join");int c = EINVAL;printf("ret %d, ret1 %d EINVAL=%d\n ",ret,ret1,c);//设置了pthread_detach,主线程就无法回收子线程了,返回错误码22
}sleep(1);//如果没加pthread_join,主线程要sleep等一下子线程,不然子线程没机会打印出来
int i = 0;
for(;i<50;i++)
{ printf("%c",buf[i]);
}
printf("\n");pthread_mutex_destroy(&mutex);
printf("a= %d\n",a);
printf("pthread 0 exit with %d, pthread 1 exit with %d \n ",ret,ret1);
return 0;
}
