0,0 → 1,57 |
#include <sys/ksys.h> |
|
/* Very simple example of working with futexes in Kolibri OS. |
* Author turbocat (Maxim Logaev). |
* Thanks to Vitaly Krylov for help. |
* |
* The result of the program execution can be seen in the debug board. |
*/ |
|
#define TH_STACK_SIZE 1024 |
#define TH_LOCK 1 |
#define TH_UNLOCK 0 |
|
uint8_t th_stack[TH_STACK_SIZE]; |
|
int glob_var = 0; |
int th_lock = TH_UNLOCK; |
uint32_t futex = 0; |
|
void th_main(void) |
{ |
_ksys_debug_puts("Child thread start\n"); |
_ksys_futex_wait(futex, TH_LOCK, 0); |
glob_var = 99; |
_ksys_debug_puts("Child thread end\n"); |
_ksys_exit(); |
} |
|
int main(void) |
{ |
_ksys_debug_puts("Parrent thread start"); |
futex = _ksys_futex_create(&th_lock); |
th_lock = TH_LOCK; |
|
if (_ksys_create_thread(th_main, th_stack) == -1) { |
_ksys_debug_puts("Unable to create a new thread!\n"); |
return 1; |
} |
|
glob_var = 88; |
_ksys_thread_yield(); |
|
_ksys_delay(100); |
|
if (glob_var == 88) { |
_ksys_debug_puts("Futex test OK :)\n"); |
} else { |
_ksys_debug_puts("Futex test FAIL :(\n"); |
} |
|
th_lock = TH_UNLOCK; |
_ksys_futex_wake(futex, 1); |
|
_ksys_futex_destroy(futex); |
_ksys_debug_puts("Parrent thread end"); |
return 0; |
} |