高级保镖:linux 线程同步实例
来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 09:29:44
#include
#include
#include
#include
#include
void *thread_function(void *arg);
pthread_mutex_t work_mutex;/*互斥量,保护工作区间及额外变量 time_to_exit*/
#define WORK_SIZE 1024
char work_area[WORK_SIZE];/*工作区*/
int time_to_exit=0;
int main()
{
int res;
pthread_t a_thread;
void *thread_result;
res = pthread_mutex_init(&work_mutex,NULL);//初始化工作区间
if(res!=0){
perror("Mutex initalization failed");
exit(EXIT_FAILURE);
}
res = pthread_create(&a_thread,NULL,thread_function,NULL);//创建新线程
if(res!=0){
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
/*主线程*/
pthread_mutex_lock(&work_mutex);
printf("Input some text,Enter 'end' to finish\n");
while(!time_to_exit){
fgets(work_area,WORK_SIZE,stdin);
pthread_mutex_unlock(&work_mutex);
while(1){
pthread_mutex_lock(&work_mutex);
if(work_area[0]!='\0'){
pthread_mutex_unlock(&work_mutex);
sleep(1);
}else{
break;
}
}
}
pthread_mutex_unlock(&work_mutex);
printf("\n Waiting for thread to finish...\n");
res = pthread_join(a_thread,&thread_result);
if(res !=0 ){
perror("Thread joined\n");
pthread_mutex_destroy(&work_mutex);
exit(EXIT_SUCCESS);
}
printf("Thread joined\n");
pthread_mutex_destroy(&work_mutex);
exit(EXIT_SUCCESS);
}
// 新线程
void *thread_function(void *arg){
sleep(1);
pthread_mutex_lock(&work_mutex);
while(strncmp("end",work_area,3)!=0){
printf("You input %d characters\n",strlen(work_area)-1);
work_area[0]='\0';
pthread_mutex_unlock(&work_mutex);
while(work_area[0]=='\0'){
pthread_mutex_unlock(&work_mutex);
sleep(1);
pthread_mutex_lock(&work_mutex);
}
}
time_to_exit=1;
work_area[0]='\0';
pthread_mutex_unlock(&work_mutex);
pthread_exit(0);
}
-----------------------------------------------------------------
编译运行:
$gcc -Wall -lpthread -o test threadsyntest.c
$./test
结果:
#include
#include
#include
#include
void *thread_function(void *arg);
pthread_mutex_t work_mutex;/*互斥量,保护工作区间及额外变量 time_to_exit*/
#define WORK_SIZE 1024
char work_area[WORK_SIZE];/*工作区*/
int time_to_exit=0;
int main()
{
int res;
pthread_t a_thread;
void *thread_result;
res = pthread_mutex_init(&work_mutex,NULL);//初始化工作区间
if(res!=0){
perror("Mutex initalization failed");
exit(EXIT_FAILURE);
}
res = pthread_create(&a_thread,NULL,thread_function,NULL);//创建新线程
if(res!=0){
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
/*主线程*/
pthread_mutex_lock(&work_mutex);
printf("Input some text,Enter 'end' to finish\n");
while(!time_to_exit){
fgets(work_area,WORK_SIZE,stdin);
pthread_mutex_unlock(&work_mutex);
while(1){
pthread_mutex_lock(&work_mutex);
if(work_area[0]!='\0'){
pthread_mutex_unlock(&work_mutex);
sleep(1);
}else{
break;
}
}
}
pthread_mutex_unlock(&work_mutex);
printf("\n Waiting for thread to finish...\n");
res = pthread_join(a_thread,&thread_result);
if(res !=0 ){
perror("Thread joined\n");
pthread_mutex_destroy(&work_mutex);
exit(EXIT_SUCCESS);
}
printf("Thread joined\n");
pthread_mutex_destroy(&work_mutex);
exit(EXIT_SUCCESS);
}
// 新线程
void *thread_function(void *arg){
sleep(1);
pthread_mutex_lock(&work_mutex);
while(strncmp("end",work_area,3)!=0){
printf("You input %d characters\n",strlen(work_area)-1);
work_area[0]='\0';
pthread_mutex_unlock(&work_mutex);
while(work_area[0]=='\0'){
pthread_mutex_unlock(&work_mutex);
sleep(1);
pthread_mutex_lock(&work_mutex);
}
}
time_to_exit=1;
work_area[0]='\0';
pthread_mutex_unlock(&work_mutex);
pthread_exit(0);
}
-----------------------------------------------------------------
编译运行:
$gcc -Wall -lpthread -o test threadsyntest.c
$./test
结果:
linux 线程同步实例
Linux之线程同步篇|Linux,线程同步-中国源码网: 开放源代码&&编程
C#教程:线程同步
VC 线程同步
linux线程库
Visual C++线程同步技术
Linux 线程实现机制分析
linux线程和相关函数
C#教程:线程应用实例
用户方式中线程的同步
Visual C++线程同步技术剖析
进程线程同步的四种方法
Linux信号量编程实例
通用线程 -- sed 实例,第 2 部分
通用线程 -- sed 实例,第 3 部分
通用线程:Awk 实例,第 3部分
多线程编程之四——线程的同步
Linux信号量semaphore编程实例
Linux防火墙的配置实例
pthread_join函数及linux线程 - jxxfqyy的专栏 - CSDN博客
linux 线程实现机制分析 - 技术文档 - 网络技术 Linux时代 - 开源、自由、...
Linux设备驱动程序设计实例 (转载)
linux排错实例(一)
Windows线程同步与互斥技术总结 - 陆小小的专栏 - CSDNBlog