(原創) 如何让一个thread在背景不断的执行? (使用semaphore) (OS) (Linux) (C/C++) (C)
2006-12-04 01:02
1051 查看
要让一个thread在背景不断的执行,最简单的方式就是在该thread执行无穷回圈,如while(1) {},这种写法虽可行,却会让CPU飙高到100%,因为CPU一直死死的等,其实比较好的方法是,背景平时在Sleep状态,当前景呼叫背景时,背景马上被唤醒,执行该做的事,做完马上Sleep,等待前景呼叫。当背景sem_wait()时,就是马上处于Sleep状态,当前景sem_post()时,会马上换起背景执行,如此就可避免CPU 100%的情形了。
1#include <stdio.h> // printf(),
11#include <stdlib.h> // exit(), EXIT_SUCCESS
12#include <pthread.h> // pthread_create(), pthread_join()
13#include <semaphore.h> // sem_init()
14
15sem_t binSem;
16
17void* helloWorld(void* arg);
18
19
54void* helloWorld(void* arg) while(1) // Wait semaphore
57 sem_wait(&binSem);
58 printf("Hello World\n");
59 }
60}
1#include <stdio.h> // printf(),
11#include <stdlib.h> // exit(), EXIT_SUCCESS
12#include <pthread.h> // pthread_create(), pthread_join()
13#include <semaphore.h> // sem_init()
14
15sem_t binSem;
16
17void* helloWorld(void* arg);
18
19
54void* helloWorld(void* arg) while(1) // Wait semaphore
57 sem_wait(&binSem);
58 printf("Hello World\n");
59 }
60}
相关文章推荐
- (原創) 如何建立一个thread? (OS) (Linux) (C/C++) (C)
- (原創) 如何在Ubuntu中使用漂亮的中文字型? (OS) (Linux) (Ubuntu) (Web) (FireFox)
- (原創) 如何在Linux使用Eclipse + CDT开发C/C++程序? (OS) (Linux) (C/C++) (gcc) (g++)
- (原創) 如何每间格一段时间就执行function? (setitimer()) (C/C++) (C) (OS) (Linux)
- (原創) 如何在curses中使用getch()? (OS) (Linux) (C/C++) (C)
- (原創) 如何解決使用preverify時,出現『Segmentation fault』的錯誤訊息? (OS) (Linux) (CentOS) (Java) (J2ME) (MIDP)
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- 如何在Linux使用Eclipse + CDT开发C/C++程序? (OS) (Linux) (C/C++) (gcc) (g++)
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- Linux学习笔记2:如何快速的学习使用一个命令
- Linux学习笔记2:如何快速的学习使用一个命令
- 如何使用Linux的Crontab定时执行PHP脚本的方法
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- Linux下如何颁发证书:学习使用openssl搭建一个CA
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- Linux下如何强制中断一个程序的执行?
- Linux内核如何装载和启动一个可执行程序(Linux)
- 【LINUX】——linux如何使用Python创建一个web服务
- 如何使用Linux的Crontab定时执行PHP脚本的方法
- 在Linux上,如何知道一个可执行文件是否包含调试信息呢?