pthread_mutex_timedlock

函数pthread_mutex_timedlock
当线程试图获取一个已加锁的互斥变量时,pthread_mutex_timedlock互斥量原语允许绑定线程
阻塞的时间。pthread_mutex_timedlock函数与pthread_mutex_lock是基本等价的,但是在达到超时
时间值时,pthread_mutex_timedlock不会对互斥量进行加锁,而是返回错误码ETIMEDOUT。
#include<pthread.h>
#include<time.h>
int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex,const struct timespec 

*restrict tsptr);
超时指定愿意等待的绝对时间(与相对时间对比而言,指定在时间x之前可以阻塞等待,而不是说愿

意阻塞Y秒)。这个超时时间是用timespec结构来表示的,它用秒和纳秒来描述时间。
#include"apue.h"
#include <pthread.h>
#include<time.h>

int
main(void)
{
    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);
    pthread_mutex_unlock(&lock);//这个是我自己加的,为了测试这个程序
    tout.tv_sec += 10;    /* 10 seconds from now */
    /* caution: this could lead to deadlock */
    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", strerror(err));
    exit(0);
}

时间: 2024-08-05 05:25:11

pthread_mutex_timedlock的相关文章

POSIX API

POSIX标准总体分析 POSIX,全称为可移植性操作系统接口,是一种关于信息技术的IEEE标准.它包括了系统应用程序接口(API),以及实时扩展(C语言). 该标准的目的是定义了标准的基于UNIX操作系统的系统接口和环境来支持源代码级的可移植性.现在,标准主要提供了依赖C语言的一系列标准服务,再将来的版本中,标准将致力于提供基于不同语言的规范. 该标准对核心需求部分定义了一系列任何编程语言都通用的服务,这一部分服务主要从其功能需求方面阐述,而非定义依赖于编程语言的接口.语言规范主要有两部分组成

线程同步API

头文件:<pthread.h> 编译记得加 -lpthread库 1:互斥锁(mutex) 数据类型:pthread_mutex_t 操作API: // 初始化一个互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t attr); or mutex = PTHREAD_MUTEX_INITIALIZER; // 销毁一个互斥锁 int pthread_mutex_destory(pthread_

11.6 线程同步

11.6.1 互斥Example11.6.2 避免死锁Example11.6.3 pthread_mutex_timedlock 函数Example11.6.4Reader-Writer LocksExample11.6.5 带有超时功能的读写锁11.6.6 条件变量Example11.6.7 自旋锁11.6.8 BarriersExample 当多个线程控制流需要共享内存的时候,我们需要确保每一个线程所看到的数据是一致的.如果一个线程使用别的线程不会读取或者修改的数据,那么一致性问题并不会出现

《Unix环境高级编程》读书笔记 第11章-线程

1. 引言 了解如何使用多个控制线程在单进程环境中执行多个任务. 不管在什么情况下,只要单个资源需要在多个用户键共享,就必须处理一致性问题. 2. 线程概念 典型的Unix进程可以看成只有一个控制线程:一个进程在某一时刻只能做一件事情. 多线程带来的好处: 通过为每种事件类型分配单独的处理线程,可以简化处理异步事件的代码.每个线程在进行事件处理时可以采用同步编程模式. 多个进程必须使用操作系统提供的复制机制才能实现内存和文件描述符的共享.而多个线程自动地可以访问相同的存储空间和文件描述符. 有些

《UNIX环境高级编程(第3版)》

<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series) 原出版社: Addison-Wesley Professional 作者: (美)W. Richard Stevens    Stephen A. Rago 译者: 戚正伟 张亚英 尤晋元 出版社:人民邮电出版社 ISBN:9787

《UNIX环境高级编程》读书笔记之线程(1)

1.线程标识 就像每个进程有一个进程ID一样,每个线程也都有一个线程ID.进程ID在整个系统中是唯一的,但线程ID不同,线程ID只在它所属的进程环境中有效.线程ID用pthread_t数据类型来表示,通过pthread_equal函数来比较两线程ID是否相同,通过pthread_equal函数可以得到当前线程的ID. #include <pthread.h> int pthread_equal(pthread_t tid1,pthread_t tid2); #include <pthre

APUE学习之多线程编程(二):线程同步

为了保证临界资源的安全性和可靠性,线程不得不使用锁,同一时间只允许一个或几个线程访问变量.常用的锁有互斥量,读写锁,条件变量 一.互斥量 互斥量是用pthread_mutex_t数据类型表示的,在使用之前,必须对其进行初始化,可以把它设置为PTHREAD_MUTEX_INITIALIZER(只适于静态分配的互斥量),也可以通过调用pthread_mutex_init函数进行初始化,最后还要调用pthread_mutex_destroy进行释放. #include <pthread.h> int

pthread的各种同步机制

https://casatwy.com/pthreadde-ge-chong-tong-bu-ji-zhi.html pthread是POSIX标准的多线程库,UNIX.Linux上广泛使用,windows上也有对应的实现,所有的函数都是pthread打头,也就一百多个函数,不是很复杂.然而多线程编程被普遍认为复杂,主要是因为多线程给程序引入了一定的不可预知性,要控制这些不可预知性,就需要使用各种锁各种同步机制,不同的情况就应该使用不同的锁不同的机制.什么事情一旦放到多线程环境,要考虑的问题立刻

带有超时的读写锁

与互斥量一样使应用程序在获取读写锁时避免陷入永久阻塞状态. 这两个函数是 #include <pthread.h> #include <time.h> int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock, const struct timespec *restrict abs_time-out); int pthread_rwlock_timedwrlock(pthread_rwlock_t *restr