【Linux-C】线程实践

用KDevelop开发Linux线程,

 

 

编译遇到pthread_join,说找不到这个函数。

是link的时候遇到的问题;

 

在kdevelop的右边的“Automake Manager”的下面一个窗口,右键工程名字,选择Option菜单

在Libraries卡片中的”Link libraries outside project(LDADD)“中,进行add

输入 -lpthread

 

编译通过

 

==================================

在一个for循环中,开启多个线程,每个线程开启的时候,传入一个参数(就是for的循环变量),发现所有线程中,接收到的值都是一样的,可是传入的时候值是不同的。

pthread_create( &thread, NULL, (void *)function, (void *)&i )

 

线程创建是,传入的是i的地址,开启线程,是异步的过程,不是调用pthread_create,线程就开启了,

 

这样每个线程接收到的地址是一样的,而且几乎都是在for循环结束的时候才开启的线程,这样线程中,接收到的值都是一样的;

 

如果要线程接收到正确的值,可以

1. 在线程开启后,调用一下sleep或者usleep,给线程启动的时间;

2. 传入线程的值,给每个线程一个不同的变量,这样每个线程就能接收到自己的值,不会冲突了;

 

==============================

pthread_exit和return区别

 

如果在线程中,return返回到函数的上一层,而pthread_exit在线程中无论哪里调用,就退出线程

这2个函数,在线程主函数中调用,效果是一样的;

 

 

你可能感兴趣的:(c,linux,线程)