如何使函数线程安全

时间:2014-12-16 05:55:17

标签: c++ multithreading

我有一个班级说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 (),那么它们将独立工作并且将独立地更改被访问的数组.....这会使事情出错......

在制作我自己的图表库时如何处理这样的事情??

1 个答案:

答案 0 :(得分:1)

如果您的线程有自己的&#34; Graph&#34;的实例,那么您不需要线程安全,因为每个线程访问不同的内存区域。

但是如果你在多个线程之间共享数组:

使用锁定(互斥,信号量),同步或线程间通信。

锁定访问过的数组,例如。 std :: lock,boost :: mutex(或像pthread mutex这样的平台特定锁定)。并尝试锁定数据,而不是代码。

somelock.lock();
visited[i]=false; //global array
somelock.unlock();