我在多线程应用程序中使用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)
答案 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