如何使函数线程安全

how to make the functions thread safe

本文关键字:安全 线程 函数 何使      更新时间:2023-10-16

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

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

如果您的线程有自己的"Graph"实例,则不需要线程安全,因为每个线程访问不同的内存区域。

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

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

锁定

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

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