我目前正試圖將當前正在運行的線程限制爲最大值,例如,核心數量。C++信號量不考慮調用順序
這一切都做得很好,每秒我有100個完整的數據寫入(打開,追加,關閉),但是當不使用信號量作爲互斥量(數量大於1)時,順序或寫入訪問是canged。
使用一個for循環:
for(int i=0;i<10;i++)
mywrite.writeasnewthread("test.txt","asd"+mywrite.tostring(i));
其中writeasnewthread包含
WaitForSingleObject(this->semaphor,INFINITE);
CreateThread(NULL,0,&threadwrite,(void*)param,0,NULL);
與threadwrite新的線程,含PARAM名稱,數據和信號。 然後在年底threadwrite我打電話
ReleaseSemaphore(writeparam->This->semaphor,1,NULL);
然而,當我看到我在threadwrite寫的文件,有繼續這樣
2013-5-16 14:41:25 asd0
2013-5-16 14:41:25 asd3
2013-5-16 14:41:25 asd5
2013-5-16 14:41:25 asd7
2013-5-16 14:41:25 asd1
2013-5-16 14:41:25 asd8
2013-5-16 14:41:25 asd9
2013-5-16 14:41:25 asd6
2013-5-16 14:41:25 asd4
2013-5-16 14:41:25 asd2
東西,我可能有一些基本的認識誤區信號燈的工作原理,但我雖然線程將等待信號燈再次有一個空閒插槽,然後得到處理...
那麼,有沒有一種不錯的方式來保存文件的順序?還是會破壞信號燈的概念?
問候, 朱利安
另外(羅伯特的答案是正確的),會有什麼用?如果寫入按嚴格順序執行,則不會獲得任何併發性! – Useless
@Useless好吧,我計劃更好地使用使用線程的處理器,但現在我認爲一個互斥量就足夠了,所以一個額外的線程處理IO,主要的線程處理其他事務,以及確保存在的互斥量現在當保存大量數據時,沒有競爭條件就足夠了。 – Julian
老實說,這些寫入是如此之小,它們可能比在不同線程中執行同步所需的同步更便宜。 – Useless