#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <sys/time.h>
#include <pthread.h>
int main(){
int err;
struct timespec tout;
struct tm *tmp;
char buf[64];
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&lock);
printf("mutex is locked\n");
clock_gettime(CLOCK_REALTIME,&tout);
tmp = localtime(&tout.tv_sec);
strftime(buf,sizeof(buf),"%r",tmp);
printf("current time is %s\n",buf);
tout.tv_sec += 10;
err = pthread_mutex_timedlock(&lock,&tout);
clock_gettime(CLOCK_REALTIME,&tout);
tmp = localtime(&tout.tv_sec);
strftime(buf,sizeof(buf),"%r",tmp);
printf("the time is now %s\n",buf);
if(err == 0)
printf("mutex locked again!\n");
else
printf("can't lock mutex again: %s\n",(char *)strerror(err));
return 0;
}
#include <errno.h>
#include <time.h>
#include <sys/time.h>
#include <pthread.h>
int main(){
int err;
struct timespec tout;
struct tm *tmp;
char buf[64];
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&lock);
printf("mutex is locked\n");
clock_gettime(CLOCK_REALTIME,&tout);
tmp = localtime(&tout.tv_sec);
strftime(buf,sizeof(buf),"%r",tmp);
printf("current time is %s\n",buf);
tout.tv_sec += 10;
err = pthread_mutex_timedlock(&lock,&tout);
clock_gettime(CLOCK_REALTIME,&tout);
tmp = localtime(&tout.tv_sec);
strftime(buf,sizeof(buf),"%r",tmp);
printf("the time is now %s\n",buf);
if(err == 0)
printf("mutex locked again!\n");
else
printf("can't lock mutex again: %s\n",(char *)strerror(err));
return 0;
}
这篇博客展示了如何在Unix环境中使用线程互斥量(pthread_mutex_t)进行同步操作。通过锁定互斥量,打印当前时间并尝试在10秒后重新锁定,来演示线程间的互斥行为。如果能成功再次锁定,则输出相应信息,否则显示错误原因。
478

被折叠的 条评论
为什么被折叠?



