簡體   English   中英

如何使函數線程安全

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM