pthread_mutex

这篇具有很好参考价值的文章主要介绍了pthread_mutex。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include<stdio.h>   
#include<unistd.h>
#include<pthread.h>
#include <stdlib.h>
#include <sys/time.h>
#define MAX_THREAD_NUM 2

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void* thread_fun(void* arg)
{
    int index = *(int*)arg;
    struct timespec abstime;
    struct timeval now;
	
	gettimeofday(&now,NULL);//获取系统时间
	
    abstime.tv_sec = now.tv_sec + 20;
    abstime.tv_nsec = now.tv_usec * 1000;
    printf("[%d]thread start up!\n", index);
    pthread_mutex_lock(&mutex);
    printf("[%d]thread wait...\n", index);
    pthread_cond_timedwait(&cond, &mutex, &abstime);
    printf("[%d]thread wake up\n", index);
    pthread_mutex_unlock(&mutex);
	 printf("[%d]thread exit!\n", index);
    pthread_exit(0);
} 
int main()
{
    pthread_t tid[MAX_THREAD_NUM];
    for(int i = 0; i < MAX_THREAD_NUM; i++)
    {
        pthread_create(&tid[i], NULL, thread_fun, &i);
        sleep(0);
    }
    printf("--------before 15S--------\n");
    sleep(15);
	printf("--------after 15S--------\n");
    pthread_cond_broadcast(&cond);
	sleep(0);
    for(int i = 0; i < MAX_THREAD_NUM; ++i)
    {
		printf("[%d]pthread_join\n", i);
        pthread_join(tid[i], NULL);
    }
    return 0;
}

/*    

now.tv_sec + 10的情况
[0]thread start up!
[0]thread wait...
[1]thread start up!
[1]thread wait...
--------before 15S--------
[0]thread wake up
[0]thread exit!
[1]thread wake up
[1]thread exit!
--------after 15S--------
[0]pthread_join
[1]pthread_join

**************

now.tv_sec + 20的情况

[0]thread start up!
[0]thread wait...
[1]thread start up!
[1]thread wait...
--------before 15S--------
--------after 15S--------
[0]thread wake up
[0]pthread_join
[0]thread exit!
[1]thread wake up
[1]thread exit!
[1]pthread_join

//pthread_join一般是主线程来调用,用来等待子线程退出,因为是等待,所以是阻塞的,一般主线程会依次join所有它创建的子线程。
//pthread_exit一般是子线程调用,用来结束当前线程。
//子线程可以通过pthread_exit传递一个返回值,而主线程通过pthread_join获得该返回值,从而判断该子线程的退出是正常还是异常

精确级别:纳秒级别
 struct timespec 
 //精确到纳秒
{
    time_t tv_sec; //秒
    long tv_nsec;//纳秒,1s = 1000ms(毫秒) = 1000*1000us(微妙) = 1000*1000*1000ns(纳秒)
}
精确级别:微妙级别
 struct timeval
{
     time_t tv_sec; //秒 
     long tv_usec;//微妙,1s = 1000ms(毫秒) = 1000*1000us(微妙) = 1000*1000*1000ns(纳秒)
};
*/
 文章来源地址https://www.toymoban.com/news/detail-467759.html

到了这里,关于pthread_mutex的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pthread.h头文件

    在Unix/Linux系统中,C/C++提供了pthread(POSIX线程)API。它允许我们为并发流程创建多个线程,这可以提高程序在多核处理器或上的执行速度。 想要使用pthreads库的所有功能,我们必须在.c或.c++文件中包含pthread.h头文件,在编译文件时在命令行中使用 -pthread 或 -lpthread。 参数:

    2024年02月06日
    浏览(26)
  • linux_进程锁与文件锁-pthread_mutexattr_init函数-pthread_mutexattr_setpshared函数

    接上一篇:linux_信号量函数系列-信号量实现生产者消费者模型-sem_init函数-sem_wait函数-sem_post函数-sem_trywait函数   今天来分析进程锁和线程锁,进程锁需要用到 pthread_mutexattr_init函数、pthread_mutexattr_destroy函数、pthread_mutexattr_setpshared函数 ,而文件锁则需要用到 fcntl函数 ,话

    2024年02月02日
    浏览(37)
  • C++11互斥量mutex使用详解

    mutex又称互斥量,C++ 11中与 mutex相关的类(包括锁类型)和函数都声明在#include头文件中,所以如果你需要使用 std::mutex,就必须包含#include头文件。 C++11提供如下4种语义的互斥量(mutex) : std::mutex,独占的互斥量,不能递归使用。 std::time_mutex,带超时的独占互斥量,不能递

    2024年02月16日
    浏览(35)
  • C语言 pthread_create

    备注void *,最好添加返回值 原因:在实践中,虽然你的函数可能不需要返回任何值,但为了与 pthread_create 函数的预期函数指针格式相匹配,最好遵守函数指针所需的返回类型。这是一种良好的编程实践,确保你的代码能够在各种情况下正确编译和执行。即使编译器没有强制

    2024年02月06日
    浏览(40)
  • Modern C++ std::mutex底层原理

    我时常有这样的疑问: std::mutex怎么就能保证后面的语句100%安全哪? CPU reordering就不会把这些语句重排到mutex前面执行? 而且各个CPU都是有L1、L2缓存的,如果mutex后面要访问的的变量在这些缓存中怎么办? 带着这些疑问我们先看看std::mutex是怎么实现的。 先给个图,再细说。

    2024年01月17日
    浏览(37)
  • C++ 各类mutex和读写锁性能比较

    pthread_mutex_t: 互斥锁,同一瞬间只能有一个线程能够获取锁,其他线程在等待获取锁的时候会进入休眠状态。因此pthread_mutex_t消耗的CPU资源很小,但是性能不高,因为会引起线程切换。 pthread_spinlock_t: 自旋锁,同一瞬间也只能有一个线程能够获取锁,不同的是,其他线程在

    2024年02月02日
    浏览(40)
  • 【Rust 基础篇】Rust 互斥器(Mutex)

    在 Rust 中,互斥器(Mutex)是一种用于在多个线程之间共享数据的并发原语。互斥器提供了一种安全的方式,允许多个线程访问共享数据,但每次只允许一个线程进行写操作。本篇博客将详细介绍 Rust 中互斥器的使用方法,包含代码示例和对定义的详细解释。 在 Rust 中,我们

    2024年02月15日
    浏览(80)
  • Linux pthread_create源码分析

    本文介绍pthread_create函数的使用和源码分析。 /include/pthread.h bionic/libc/bionic/pthread_create.cpp bionic/libc/bionic/pthread_attr.cpp Android中的绝大部分线程,最后都是通过pthread_create创建的。 pthread_t *thread: 传递一个 pthread_t 类型的指针变量,也可以直接传递某个 pthread_t 类型变量的地址。

    2024年02月07日
    浏览(36)
  • Linux多线程编程- pthread_self()

    pthread_self() 函数是 POSIX 线程库的一部分,它提供了一个非常简单的功能:获取当前线程的唯一标识符。这个标识符是 pthread_t 类型的,通常是一个无符号的长整型值,不过具体的类型是由实现定义的,这意味着它可以在不同的操作系统上有不同的表示。 这个标识符对于调试多

    2024年02月06日
    浏览(33)
  • C++11之超时锁timed_mutex

    超时锁:用来记录线程加锁 解锁 等竞争锁的过程,多用于调试多线程时使用。 启动多个线程,然后,竞争一把超时锁,分别打印记录加锁成功的线程和失败的线程id: 打印结果:

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包