linux线程-使用互斥量同步
Posted 为了维护世界和平_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux线程-使用互斥量同步相关的知识,希望对你有一定的参考价值。
互斥量:允许程序员锁住某个对象,使得每次只能有一个线程访问它
互斥量相关的函数
#include<pthread.h>
//初始化
int pthread_mutex_init(pthread_mutex_t mutex,const pthread_mutexattr_t *mutexattr);
//加锁
int pthread_mutex_lock(pthread_mutex_t *mutex);
//解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);
//销毁
int pthread_mutex_destroy(pthread_mutex_t *mutex)
临界区资源 work_area,time_to_exit
主线程获取输入,子线程统计字符串大小
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<semaphore.h>
#include<pthread.h>
void *thread_function(void *arg);
pthread_mutex_t work_mutex;
#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;
memset(work_area,0,sizeof(work_area));
res = pthread_mutex_init(&work_mutex,NULL);
if(res != 0)
perror("Semaphore initialization failed\\n");
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 txt,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 join failed");
exit(EXIT_FAILURE);
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);
sleep(1);
pthread_mutex_lock(&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);
打印输出
(base) wy@ubuntu:~/process$ ./thread4
Input some txt,Enter 'end' to finish
hello
You input 5 characters
end
Waiting for thread to finish...
Thread joined
以上是关于linux线程-使用互斥量同步的主要内容,如果未能解决你的问题,请参考以下文章