如何使函数线程安全
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 ()
,那么它们将独立工作,并将独立地更改访问的数组.....这会让事情出错.....
在制作自己的图形库时如何处理这样的事情...?
如果您的线程有自己的"Graph"实例,则不需要线程安全,因为每个线程访问不同的内存区域。
但是,如果您在多个线程之间共享数组:
使用锁定(互斥锁、信号量(、同步或线程间通信。
锁定访问过的数组,例如 std::lock、boost::mutex(或特定于平台的锁定,如 pthread mutex(。并尝试锁定数据,而不是代码。
somelock.lock();
visited[i]=false; //global array
somelock.unlock();
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 在std::thread中,joinable()然后join()线程安全吗
- 在c++队列中使用pop和visit实现线程安全
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 线程安全运算符<<
- 如何使缓存线程安全
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 提升精神 V2 Qi 语法线程安全吗?
- 线程调用的函数对对象删除是否安全?
- asio 链对象线程安全吗?
- 线程安全队列 c++
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 有没有更好的方法可以使此代码线程安全?线程局部静态似乎是一个生硬的工具