[英]how to make the functions thread safe
我上課說Graph
class Graph
{
bool* visited;
void myfun ()
{
visited = new bool[10];
for (int i=0;i<10;i++)
visited[i]=false;
myfunc2 ();
}
void myfunc2 ()
{
// Assume this changes the visited array
}
}
現在,如果我在不同的線程中調用myfunc ()
,則它們將獨立工作,並將獨立更改訪問的數組.....這將使事情出錯.....
在創建自己的圖形庫時如何處理此類問題?
如果線程具有自己的“圖形”實例,則不需要線程安全,因為每個線程都訪問不同的內存區域。
但是,如果您在多個線程之間共享數組:
使用鎖定(互斥,信號量),同步或線程間通信。
鎖定訪問數組,例如。 std :: lock,boost :: mutex(或特定於平台的鎖定,例如pthread互斥鎖)。 並嘗試鎖定數據,而不是代碼。
somelock.lock();
visited[i]=false; //global array
somelock.unlock();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.