/*****************
任务:
一个线程+2个子线程,实现交替报数
思路:
1.创建两个子线程
2.主线程先报数,全局变量i,阻塞子线程(主线程和子线程会同时运行,所以要阻塞目前不需要的线程)
3.主线程完成,阻塞后,子线程执行
*****************/
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int i = 0;
//子线程1--完成的内容
void* task1(void *arg)
{
//先提取一下传递进来的参数arg
long a;
a = (long)arg;
printf("a = %ld\r\n",a);
//子线程1报数
while(i < 10)
{
if(i%3 == 1)
{
printf("task%ld = %d\r\n",a,i);
sleep(1);//防止其他条件成立
i++;
}
else
{
//此时不是主进程报数的时间,阻塞一下
sleep(1);
}
}
pthread_exit(NULL);
}
//子线程2
void* task2(void *arg)
{
//先提取一下传递进来的参数arg
long a;//线程内部的是局部变量,只能本线程使用
a = (long)arg;
printf("a = %ld\r\n",a);
//子线程1报数
while(i < 10)
{
if(i%3 == 2)
{
printf("task%ld = %d\r\n",a,i);
sleep(1);//防止其他条件成立
i++;
}
else
{
//此时不是主进程报数的时间,阻塞一下
sleep(1);
}
}
pthread_exit(NULL);
}
//本身就是一个主线程
int main(int argc,char *argv[])
{
//定义变量
pthread_t tid1,tid2;
//创建对应的线程1
pthread_create(&tid1,NULL,task1,(void *)1);
printf("tid1 = %ld\r\n",tid1);
//创建对应的线程2
pthread_create(&tid2,NULL,task2,(void *)2);
printf("tid2 = %ld\r\n",tid2);
//主线程报数的位置
while(i < 10)
{
if(i%3 == 0)
{
printf("master i = %d\r\n",i);
sleep(1);//防止其他条件成立
i++;
}
else
{
//此时不是主进程报数的时间,阻塞一下
sleep(1);
}
}
//等待线程结束
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
exit(0);
}
养家糊口的小广告:
1.好好敲代码,来年当个小码农
2.《富豪赚钱秘籍》仅剩9份。如果想要购买,请先关注,然后私信博主。
3.《如何找女朋友》剩余26份。如果想要购买,请先关注,然后私信博主。
4.《MACD战法总结》剩余39份。如果想要购买,请先关注,然后私信博主。