我有一个班级说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 ()
,那么它们将独立工作并且将独立地更改被访问的数组.....这会使事情出错......
在制作我自己的图表库时如何处理这样的事情??
答案 0 :(得分:1)
如果您的线程有自己的&#34; Graph&#34;的实例,那么您不需要线程安全,因为每个线程访问不同的内存区域。
但是如果你在多个线程之间共享数组:
使用锁定(互斥,信号量),同步或线程间通信。
锁定访问过的数组,例如。 std :: lock,boost :: mutex(或像pthread mutex这样的平台特定锁定)。并尝试锁定数据,而不是代码。
somelock.lock();
visited[i]=false; //global array
somelock.unlock();