請教有關C 多執行緒產生重複資料的簡單例子

2022-12-10 08:35:14 字數 553 閱讀 9467

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...