#define _POSIX_C_SOURCE 200112L
#include "stdio.h"
#include "unistd.h"
#include "pthread.h"
#include "string.h"
#include "time.h"
//定义且初始化互斥量
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
//线程1
void* task1(void* p)
{
char str[100];
pthread_mutex_lock(&mutex);//获取互斥量
while (1)
{
scanf("%s", str);
if (!strcmp(str, "end"))//等待输入接收到end字符串
{
pthread_mutex_unlock(&mutex);//释放互斥量
return NULL;//结束
}
}
return 0;
}
int main()
{
pthread_t thread;
pthread_create(&thread, NULL, task1, NULL);
sleep(1);//等待线程先获取互斥量
struct timespec wait;
clock_gettime(CLOCK_REALTIME, &wait);
wait.tv_sec += 5;//等待到5秒后
if (!pthread_mutex_timedlock(&mutex, &wait))//获取信号量,等待子线程结束,被阻塞的信号释放
{
fputs("end ok\n", stdout);
}
else
{
fputs("timeout\n", stdout);
}
return 0;
}
mutex做全局变量,不需要函数初始化,初始化等于PTHREAD_MUTEX_INITIALIZER即可
thread_mutex_unlock(&mutex) 释放互斥量
pthread_mutex_lock(&mutex) 获取互斥量,未获得则一直阻塞
pthread_mutex_timedlock(&mutex) //扩展:阻塞一段时间无法获取则不再阻塞,返回超时
pthread_mutex_trylock() 尝试获取互斥量,无法获取不阻塞立刻返回