📄 mutex.c
字号:
#include <rtl.h>#include <time.h>#include <pthread.h>static pthread_t thread;static pthread_mutex_t mutex /* = PTHREAD_MUTEX_INITIALIZER */;static void * start_routine(void *arg){ int ret; hrtime_t t; hrtime_t t2; struct sched_param p; p . sched_priority = 1; pthread_setschedparam (pthread_self(), SCHED_FIFO, &p); rtl_printf("RTLinux thread starts on CPU%d\n", rtl_getcpuid()); ret = pthread_mutex_trylock(&mutex); rtl_printf ("RT-thread: pthread_mutex_trylock returned %d\n", ret); if (ret != 0) { rtl_printf("RT-thread: about to pthread_mutex_lock\n"); t = gethrtime(); ret = pthread_mutex_lock (&mutex); t2 = gethrtime(); rtl_printf("RT-thread: pthread_mutex_lock returned %d (%d ns elapsed)\n", ret, (unsigned) (t2 - t)); } ret = pthread_mutex_unlock (&mutex); rtl_printf("RT-thread: pthread_mutex_unlock returned %d\n", ret); return (void *) 35;}int init_module(void){ int ret; hrtime_t t; int sleep = 500000000; pthread_attr_t attr; rtl_printf("RTLinux mutex test starts on CPU%d\n", rtl_getcpuid()); pthread_attr_init (&attr); /* try to run the thread on another CPU */ if (rtl_cpu_exists(!rtl_getcpuid())) { pthread_attr_setcpu_np(&attr, !rtl_getcpuid()); } pthread_mutex_init (&mutex, 0); ret = pthread_mutex_lock (&mutex); rtl_printf("Linux thread: pthread_mutex_lock returned %d\n", ret); ret = pthread_create (&thread, &attr, start_routine, 0); if (ret) { rtl_printf("failed to create a thread\n"); return ret; } rtl_printf("Linux thread is about to sleep for %d ns\n", sleep); t = gethrtime(); while (gethrtime() < t + sleep); rtl_printf("Linux thread is about to unlock the mutex\n"); ret = pthread_mutex_unlock (&mutex); rtl_printf("Linux thread: pthread_mutex_unlock returned %d\n", ret); return 0;}void cleanup_module(void){ pthread_delete_np (thread); pthread_mutex_destroy (&mutex);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -