-
Notifications
You must be signed in to change notification settings - Fork 151
Open
Description
assume ping and pong thread was create, and have following code.
ping_thread
__USER_TEXT
void *ping_thread(void *arg)
{
pthread_mutex_lock(&p);
printf("PING...\n");
value = 10;
L4_Sleep(L4_TimePeriod(1000 * 1000));
printf("I'm a sleepy man\n");
pthread_mutex_unlock(&p);
return NULL;
}pong_thread
__USER_TEXT
void *pong_thread(void *arg)
{
pthread_mutex_lock(&p);
value = 20;
printf("PONG...\n");
pthread_mutex_unlock(&p);
return NULL;
}main
pager_start_thread(threads[PING_THREAD], ping_thread, NULL);
pager_start_thread(threads[PONG_THREAD], pong_thread, NULL);we will get this result, after pong acquire mutex, it stuck in busy loop.
====================================================
Copyright(C) 2013-2014 The F9 Microkernel Project
====================================================
Git head: 58348872e98a7f833cd07690b086d7fa5abd8151
Host: x86_64
Build: 2016-10-04T21:50:39+0800
Press '?' to print KDB menu
PING: 10 1
## KDB ##
but if I add sleep for test, it work again.
__USER_TEXT int pthread_mutex_lock(pthread_mutex_t *mutex)
{
/* Busy trying */
while (pthread_mutex_trylock(mutex)) {
L4_Sleep(L4_TimePeriod(1000));
}
return 0;
}result
====================================================
Copyright(C) 2013-2014 The F9 Microkernel Project
====================================================
Git head: 58348872e98a7f833cd07690b086d7fa5abd8151
Host: x86_64
Build: 2016-10-04T21:50:39+0800
Press '?' to print KDB menu
PING: 10 1
I'm a sleepy man
PONG: 20 1
## KDB ##
I'll try to fix this. or maybe this just a recursive lock?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels