C ++多线程互斥锁" reset"

时间:2016-05-05 15:48:33

标签: c++ multithreading mutex

我在多线程应用程序中使用TerminateThread(...)来通过多个线程访问相同的资源。这很好用。但是在我的代码的某些时候,我必须使用_beginthreadex来终止线程。当我再次开始该线程时(使用bool critical_section::_Acquire_lock),如果其中一个线程在终止时处于互斥锁,我会收到异常:

  

Concurrency :: improper_lock bei Speicherort 0x03B4F3D0。

这是在rtlocks.cpp,第1184行(LockQueueNode * pPrevious = reinterpret_cast<LockQueueNode *>(InterlockedExchangePointer(&_M_pTail, pNewNode)); 中)抛出的:

<process.h>

我想,如果我可以&#34;重置&#34;互斥体,我会得到一个例外,对吗?我怎么能这样做?

(我使用std::mutex dataStorage_lock; mutexHandler[0] = &dataStorage_lock; //storing all mutexs in an array //when trying to delete: delete mutexHandler[0];

修改

我尝试了以下内容:

define('BASE_URL','http://localhost/project_name');
header('location: '.BASE_URL.'/another_controller/method/');

但我明白了:

  

Debug Assertion失败!

     

表达式:_BLOCK_TYPE_IS_VALID(pHead-&gt; nBlockUse)

2 个答案:

答案 0 :(得分:5)

这是伪代码,但你应该明白这个想法:

错误:

double

右:

float

答案 1 :(得分:2)

您需要销毁互斥锁​​并创建一个全新的互斥锁,或者您可以修改您的代码,以便在等待互斥锁时线程可以被中断(而不是终止)。有关中断的一些想法,请参见此处:http://www.boost.org/doc/libs/1_54_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.interruption