pthread_create() 中 arg 最好是一个通用的数据结构
上述的问题在猜测, 还未完成值的传递,复制,线程就已经开始运行了, 我用strace 可以猜测下 但是传递一个通用的数据结构,像线程池中的用法就非常nice,初始设计大概也是为了那样使用吧
gdb 添加断点 查看问题
综上: 先完成线程的创建,在开始值传递 C 的 for 循环贼快, 值的赋值和复制也很快
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
static char id = 'A';
void* progess(void* arg)
{
pthread_mutex_lock(&mutex);
printf("thread name: %d thread index: %#x\n",*((char*)arg),(uint32_t)pthread_self());
sleep(1);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main(void){
int ret = pthread_mutex_init(&mutex,NULL);
if(ret !=0){
perror("mutex_init");
}
pthread_cond_init(&cond,NULL);
char i,j;
pthread_t *tid = (pthread_t*)malloc(sizeof(pthread_t)*128);
for( i = 65,j =0 ; j < 20 ; i++,j++ ){
pthread_create(&tid[j],NULL,progess,(void*)&j);
}
for(i = 0 ; i < 20 ; i++){
pthread_join(tid[i],NULL);
}
free(tid);
while(1){
sleep(1);
}
}
|