【发布时间】:2012-08-28 23:07:12
【问题描述】:
在我的程序中,我有一些线程正在运行。每个线程都有一个指向某个对象的指针(在我的程序中 - 向量)。并且每个线程都会修改向量。
有时我的程序会因段错误而失败。我认为它的发生是因为线程 A 开始对向量做一些事情,而线程 B 还没有完成对它的操作?是真的吗?
我应该如何解决它?线程同步?或者可以创建一个标志 VectorIsInUse 并在使用它时将此标志设置为 true?
【问题讨论】:
-
您很可能需要使用互斥锁来保护写操作。请注意,即使您锁定写操作,迭代器和引用也可能会失效,因此没有完全安全的解决方案。最好不要从多个线程执行修改操作。
-
您好,分段错误通常是由于访问了您的进程未保留的内存造成的。可能是您使用的东西实际上不是指针吗?否则,请查看:stackoverflow.com/questions/1099513/…
-
@juanchopanza - 不仅仅是写操作,所有操作。 对共享数据的每次访问都必须受到保护。
-
@PeteBecker 同意,并且某些访问(例如对容器或迭代器的元素的引用)无论如何您都无法真正保护......
标签: c++ multithreading synchronization segmentation-fault flags