1樓:
兩個執行緒共享同一會出現問題。
原理是這樣的
比如數字a=100
這時候執行緒1和執行緒2都要執行 a-- 這條語句。
a--翻譯成彙編是這樣的:
mov ax,a
sub ax,1
mov a,ax
兩個執行緒同時執行的時候你可以看到這樣的情況mov ax,a ;執行緒1,這時候ax=100,a=100sub ax,1 ;執行緒1,這時候ax=99mov ax,a ;執行緒2,這時候ax=100,a=100sub ax,1 ;執行緒2,這時候ax=99mov a,ax ;執行緒1,這時候a=99mov a,ax ;執行緒1,這時候a=99我們本來期望兩個執行緒進行兩次自減,但是結果卻只減了1次。
解決方案:設定訊號量就可以了~vc上有專門的api可以呼叫
2樓:匿名使用者
估計是printf語句出了問題吧, 也許就是湊巧了。
printf是個不可重入的函式,在兩個執行緒裡都用printf會把緩衝搞亂掉。 你可以多執行幾次試試看
c 多執行緒函式createthread如何使用
include include using namespace std handle createthread lpsecurity attributes lpthreadattributes,size t dwstacksize,lpthread start routine lpstartaddr...
多執行緒有幾種實現方法,java多執行緒都有幾種方式實現??
執行緒建立 執行 handle handle1 dword id1 執行緒等待 waitforsingleobject handle1,infinite 執行緒同步 生產者消費者 handle m s consumer m s consumer createsemaphore null,0,20,n...
C語言基礎網路程式設計求助如何實現多執行緒
使用fork建立父子程序和socketpair進行監控即可 include include include include include include include include include include include include include void thread void...