六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 31|回复: 0

【Linux-C】线程实践

[复制链接]

升级  20.33%

71

主题

71

主题

71

主题

举人

Rank: 3Rank: 3

积分
261
 楼主| 发表于 2013-1-26 12:36:37 | 显示全部楼层 |阅读模式
用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个函数,在线程主函数中调用,效果是一样的;
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表