Jav*_*per 3 c winapi multithreading mutex
以下代码的输出为4000;如果具有互斥锁的线程不释放它,为什么是4000。我虽然会陷入僵局,但主要是我等待所有功能完成。
int M = 1000;
HANDLE mutex;
DWORD WINAPI thread_function(LPVOID param) // The thread function
{
long aux;
WaitForSingleObject(mutex, INFINITE);
for (int i = 0; i < M; i++)
{
aux = count; //count is global
aux++;
Sleep(0.5);
count = aux;
}
/*ReleaseMutex(mutex);*/
return (DWORD)0;
}
int main()
{
int N = 4;
InitializeCriticalSection(&gSection);
HANDLE* iThread = (HANDLE*)malloc(N * sizeof(HANDLE));
mutex = CreateMutex(NULL, FALSE, NULL);
for (int i = 0; i < N; i++) // N = 4, i create 4 threads
{
iThread[i] = CreateThread(NULL, 0, thread_function, mutex, 0, NULL);
}
WaitForMultipleObjects(4, iThread, TRUE, INFINITE); // I wait for all threads to finish.
printf("%d", count);
}
Run Code Online (Sandbox Code Playgroud)
预期结果是死锁,实际结果是4000(计数= 4000)。