一.
在主線程中調用
(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