巢穴

about:blank

线程内幕

一.
在主线程中调用
(1)pthread_create( &thread_a, NULL, thread_function, NULL);
(2)pthread_create( &thread_b, NULL, thread_function, NULL);
(3)pthread_create( &thread_c, NULL, thread_function, NULL);

 


在段2处,线程b可以认为线程a已经存在
但是在段2执行完以后,主线程并不知道线程a和线程b谁先执行,并不能在这里做线程a先于线程b执行的假设
因为线程的时间片分配在这里是未知的

 

二.
myglobal=myglobal+1;
myglobal是全局变量,多个线程同时在做累加的工作
是否应该为myglobal=myglobal+1;加锁呢?
肯定是应该加锁
首先我们并不知道myglobal=myglobal+1;又或是++ myglobal;能否被编译成一条汇编指令
就算如此++ myglobal被编译成了原子操作
但考虑到多核处理器,其原子操作可能在多CPU上同时处理
其结果仍然是不可预估的


以上内容转述自http://www.ibm.com/developerworks/cn/linux/thread/posix_thread2/index.html

posted on 2010-12-16 14:37 Vincent 阅读(464) 评论(0)  编辑 收藏 引用 所属分类: 多线程


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理