1.创建两个线程
#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
void *func1(void *arg)
{
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:params is %d\n",*(int *)arg);
}
void *func2(void *arg)
{
printf("t2:%ld thread is create\n",(unsigned long)pthread_self());
printf("t2:params is %d\n",*(int *)arg);
}
int main()
{
int ret;
int param=100;
pthread_t t1;
pthread_t t2;
ret=pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret==0)
{
printf("main:create t1 success\n");
}
ret=pthread_create(&t2,NULL,func2,(void *)¶m);
if(ret==0)
{
printf("main:create t2 success\n");
}
printf("main:%ld \n",(unsigned long)pthread_self());
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
运行结果:
因为线程有竞争的关系,两个线程谁先执行都不好说。
2.多个线程进行访问
#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);
int g_data=0;
void *func1(void *arg)
{
printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
printf("t1:params is %d\n",*(int *)arg);
while(1)
{
printf("t1:%d\n",g_data++);
sleep(1);
}
}
void *func2(void *arg)
{
printf("t2:%ld thread is create\n",(unsigned long)pthread_self());
printf("t2:params is %d\n",*(int *)arg);
while(1)
{
printf("t2:%d\n",g_data++);
sleep(1);
}
}
int main()
{
int ret;
int param=100;
pthread_t t1;
pthread_t t2;
ret=pthread_create(&t1,NULL,func1,(void *)¶m);
if(ret==0)
{
printf("main:create t1 success\n");
}
ret=pthread_create(&t2,NULL,func2,(void *)¶m);
if(ret==0)
{
printf("main:create t2 success\n");
}
printf("main:%ld \n",(unsigned long)pthread_self());
while(1)
{
printf("main:%d\n",g_data++);
sleep(1);
}
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
运行结果:
总结发现每一次变量的访问是随机的
——@上官可编程