SDL mutex可以加锁两次吗?
Can SDL mutex be locked twice?
当我自己测试这个时,我在我的项目中发现了一个奇怪的错误,看看:
#include <stdio.h>
#include <stdlib.h>
#include <NLF.h>
#include <SDL_mutex.h>
SDL_mutex *mutex;
void tt()
{
printf("func\n");
printf("tentando locar: %d\n", SDL_LockMutex(mutex));
printf("locado\n");
}
int main(int arg, char *argc[])
{
SDL_Thread *thread;
mutex = SDL_CreateMutex();
printf("locado : %d\n", SDL_LockMutex(mutex));
thread = SDL_CreateThread(tt, "TestThread", NULL);
printf("relocado : %d\n", SDL_LockMutex(mutex));
}
这是输出:
locado : 0
func
relocado : 0
也就是说,"mutex"先正确加锁,然后flow进入线程函数,"mutex"到你的东西,线程加锁。但是注意我没有解锁"mutex"。然后我尝试在主线程中再次锁定,它起作用了……为什么?我应该陷入僵局.-.
奇怪...
documentation 状态:
SDL mutexes are recursive.
这意味着您可以在同一个线程中多次锁定它(并且您需要解锁它的次数与您在该线程中锁定它的次数相同才能为另一个线程解锁它)
当我自己测试这个时,我在我的项目中发现了一个奇怪的错误,看看:
#include <stdio.h>
#include <stdlib.h>
#include <NLF.h>
#include <SDL_mutex.h>
SDL_mutex *mutex;
void tt()
{
printf("func\n");
printf("tentando locar: %d\n", SDL_LockMutex(mutex));
printf("locado\n");
}
int main(int arg, char *argc[])
{
SDL_Thread *thread;
mutex = SDL_CreateMutex();
printf("locado : %d\n", SDL_LockMutex(mutex));
thread = SDL_CreateThread(tt, "TestThread", NULL);
printf("relocado : %d\n", SDL_LockMutex(mutex));
}
这是输出:
locado : 0
func
relocado : 0
也就是说,"mutex"先正确加锁,然后flow进入线程函数,"mutex"到你的东西,线程加锁。但是注意我没有解锁"mutex"。然后我尝试在主线程中再次锁定,它起作用了……为什么?我应该陷入僵局.-. 奇怪...
documentation 状态:
SDL mutexes are recursive.
这意味着您可以在同一个线程中多次锁定它(并且您需要解锁它的次数与您在该线程中锁定它的次数相同才能为另一个线程解锁它)