⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sema_test.c

📁 rtlinux3.0 的源代码
💻 C
字号:
/* * RTLinux semaphore test example * *  (C) FSMLabs  2000. Michael Barabanov <baraban@fsmlabs.com> *  Released under the GNU GENERAL PUBLIC LICENSE Version 2, June 1991 */#include <rtl.h>#include <time.h>#include <pthread.h>#include <semaphore.h>#define NTHREAD 6static pthread_t threads[NTHREAD];static sem_t sem;static void * start_routine(void *arg){	int ret;	int taskno = (int)arg;	rtl_printf("task %d; about to wait on semaphore\n", taskno);	if (taskno % 2 == 0) {		ret = sem_wait(&sem);		rtl_printf("task %d; semaphore wait returned with %d\n", taskno, ret);		if (ret < 0) {			rtl_printf("task %d; errno=%d\n", taskno, errno);		}	} else {		ret = sem_timedwait (&sem, hrt2ts(clock_gethrtime(CLOCK_REALTIME) + 1000000000LL * taskno));		rtl_printf("task %d; semaphore wait returned with %d\n", taskno, ret);		if (ret < 0) {			rtl_printf("task %d; errno=%d\n", taskno, errno);		}		rtl_printf("task %d; posting the semaphore\n", taskno);		sem_post(&sem);	}	return 0;}int init_module(void){	int i;	rtl_printf("RTLinux semaphore test starts on CPU%d\n", rtl_getcpuid());	sem_init (&sem, 1, 1);	for (i = 0; i < NTHREAD; i++) {		pthread_create (&threads[i], NULL, start_routine, (void *)i);	}	return 0;}void cleanup_module(void){	int i;	for (i = 0; i < NTHREAD; i++) {		pthread_cancel (threads[i]);		pthread_join (threads[i], NULL);	}	sem_destroy(&sem);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -