Linux系统编程:循环创建N个子线程并顺序输出
2018-03-23 00:45
309 查看
实现代码
代码很简单,如下。但是也有坑!在给线程传参数的不能穿 循环遍历i 的 地址,因为 i 在主线程中 ,被多个线程共享,所以不是唯一的。那么如何让每个线程 都有独自拥有自己的顺序编号呢?1.方法一:当然可以在堆上开辟空间存储顺序编号呗。自己有自己的顺序编号的空间各自独立。
2.方法二:就是参数是void* 可以直接将循环变量i直接传给void* ,由于 arg 是每个线程 栈空间上的变量 故此 属于各个子线程,然后在使用的时候强转回 int,因为void* 和 int 刚好 都是4字节,这样做是安全的。#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
//线程 回调函数
void* myfun(void* arg)
{
//int num = (int)arg;//利用值传递的方式,因为void* 和 int类型 刚好都是4个字节所有可以进行强转
int num = *((int*)arg);
sleep(num);
printf("[%d] child thread id %lu\n",num,pthread_self());
return NULL;
}
int main(void)
{
pthread_t pthid[5];
int i;
for(i = 0;i< 5 ; i++)
{
int* temp = (int*)malloc(sizeof(int));
*temp = i;
pthread_create(&pthid[i],NULL,myfun,(void*)temp);
//pthread_create(&pthid[i],NULL,myfun,(void*)i);//可以通过值传递的方式,每个线程都自己的栈空间 保存着各种的顺序
}
sleep(i);//让线程按顺序进程打印
printf("parent thread id %lu\n",pthread_self());
return 0;
}
实现效果
相关文章推荐
- 华为oj,多线程。。保证四个线程按顺序循环输出
- 创建三个线程按顺序输出1-60,每个线程输出5个数
- Linux系统编程:fork函数的使用【循环创建N个子线程】
- 通过线程按照顺序循环输出ABC n次
- 通过线程按照顺序循环输出ABC n次
- 控制线程顺序循环输出ABC (java Condition 代码简洁版)
- N个线程顺序输出,循环M遍
- (1)用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
- for in 循环的输出顺序问题
- 三个线程循环的按顺序打印
- 顺序表的创建、插入、删除、查找、求表长、输出元素
- Android异步通信机制简单地理解,Handler是当前线程的消息队列中的一个子队列,而Runable是可以被安排到Handler去运行的接口。 首先在Activity中创建一个继承自Han
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- Java多线程:用三个线程控制循环输出10次ABC
- 润和面试题:开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- Java多线程:用三个线程控制循环输出10次ABC
- 在不开启事件循环的线程中使用QTimer(QThread::run函数自带事件循环,在构造函数里创建线程,是一种很有意思的线程用法) good
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC【转载】