線程內(nèi)幕
一.
在主線程中調(diào)用
(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可以認(rèn)為線程a已經(jīng)存在
但是在段2執(zhí)行完以后,主線程并不知道線程a和線程b誰先執(zhí)行,并不能在這里做線程a先于線程b執(zhí)行的假設(shè)
因為線程的時間片分配在這里是未知的
二.
myglobal=myglobal+1;
myglobal是全局變量,多個線程同時在做累加的工作
是否應(yīng)該為myglobal=myglobal+1;加鎖呢?
肯定是應(yīng)該加鎖
首先我們并不知道m(xù)yglobal=myglobal+1;又或是++ myglobal;能否被編譯成一條匯編指令
就算如此++ myglobal被編譯成了原子操作
但考慮到多核處理器,其原子操作可能在多CPU上同時處理
其結(jié)果仍然是不可預(yù)估的
以上內(nèi)容轉(zhuǎn)述自http://www.ibm.com/developerworks/cn/linux/thread/posix_thread2/index.html
posted on 2010-12-16 14:37 Vincent 閱讀(485) 評論(0) 編輯 收藏 引用 所屬分類: 多線程