linux c 多线程编程
文章平均质量分 84
460833359
这个作者很懒,什么都没留下…
展开
-
关于如何使用pthread_cond_timedwait()超时接口
之前大家讨论说pthread_cond_timedwait()接口不能用,如果需要超时返回功能的话必须写一个定时器来实现.但是该操作太昂贵了,其实可以直接使用该接口来实现超时等待功能的,下面描述我对该接口的了解及用法,仅供参考.1.POSIX提供了多种时钟类型,其中包括以下两种:CLOCK_REALTIME:Systemwiderealtimeclock.系统范围内的实时时钟,是个软件时钟,可以通过命令等方式修改该系统时间.CLOCK_MONOTONIC:Representsmon...转载 2022-03-01 10:28:23 · 1642 阅读 · 0 评论 -
pthread_create传递线程参数需要注意的问题
创建线程需要时间,这个线程还未创建完成时,如果参数指针的内存被释放了就会出问题,创建了线程后,加少量延时,或者传递申请malloc空间指针,在线程中释放。程序如下void* thread_rountine(void *arg){undefined int *cnt = (int*)arg; for (int i=0; i<5; ++i) printf("%d-hello\n",*cnt); return 0;}int main(void){un...转载 2021-12-13 19:15:05 · 480 阅读 · 0 评论 -
线程堆栈大小的使用介绍
先来讲说线程内存相关的东西,主要有下面几条:进程中的所有的线程共享相同的地址空间。 任何声明为 static/extern 的变量或者堆变量可以被进程内所有的线程读写。 一个线程真正拥有的唯一私有储存是处理器寄存器。 线程栈可以通过暴露栈地址的方式与其它线程进行共享。有大数据量处理的应用中,有时我们有必要在栈空间分配一个大的内存块或者要分配很多小的内存块,但是线程的栈空间的最大值在线程创建的时候就已经定下来了,如果栈的大小超过个了个值,系统将访问未授权的内存块,毫无疑问,再来的肯定是一个转载 2021-11-18 16:56:34 · 2470 阅读 · 0 评论 -
进程与线程栈大小的调整
问题现象首先看一个现象,最近在嵌入式项目开发中发现的,下面是设备的内存总量及使用:总量是24M左右,项目主程序大小1M不到,但是在默认的系统环境设置下,程序运行起来后的top看起来是这样:VSZ的大小是221MB,所以计算出来的内存使用百分比是935.4% = 221MB/24MB.VSZ表示程序使用的总虚拟内存空间大小。在很久之前也曾遇到过同样的现象,只是当时没有去深入了解为什么。刚开始发现这个221MB时,非常地吃惊,无论如何也想不通为什么1M大小不到的程序会需要使用到200M以上的转载 2021-11-18 16:54:26 · 701 阅读 · 0 评论 -
线程同步之利器(1)——可递归锁与非递归锁
概述最常见的进程/线程的同步方法有互斥锁(或称互斥量Mutex),读写锁(rdlock),条件变量(cond),信号量(Semophore)等。在Windows系统中,临界区(Critical Section)和事件对象(Event)也是常用的同步方法。简单的说,互斥锁保护了一个临界区,在这个临界区中,一次最多只能进入一个线程。如果有多个进程在同一个临界区内活动,就有可能产生竞态条件(race condition)导致错误。读写锁从广义的逻辑上讲,也可以认为是一种共享版的互斥锁。如果对一转载 2021-10-29 14:51:39 · 342 阅读 · 0 评论 -
进程间通信学习笔记-互斥锁 && 读写锁
第七章 互斥锁和条件变量互斥锁是用于保护临界区的,实际上是保护在临界区中被操纵的数据,保护多个线程或者多个进程的共享数据。#include<pthread.h>int pthread_mutex_lock(pthread_mutex_t *mptr);int pthread_mutex_trylock(pthread_mutex_t *mptr);int pthread_mutex_unlock(pthread_mutex_t *mptr);如果互斥锁已被其他线程占据了,那么pth转载 2021-09-17 20:30:21 · 217 阅读 · 0 评论 -
pthread_mutexattr_t设置的相关函数及其说明
基本概述该函数用于C函数的多线程编程中,互斥锁的初始化。 头文件:#include <pthread.h>函数原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_init()函数是以动态方式创建互斥锁..转载 2021-09-17 15:26:49 · 1831 阅读 · 0 评论 -
threadpool——基于pthread实现的简单线程池
目录threadpool——基于 pthread 实现的简单线程池1. 线程池介绍2. 线程池实现2.1. 数据结构2.2. 函数3. 线程池使用3.1. 编译3.2. 测试用例4. 源码注释4.1. threadpool.h4.2. threadpool.cthreadpool——基于 pthread 实现的简单线程池1. 线程池介绍线程池可以说是项目中经常会用到的组件,在这里假设读者都有一定的多线程基础,如果没有的话不妨在这里进行了解:POSIX 多线程基础。线程池是什么转载 2021-08-27 10:10:53 · 619 阅读 · 0 评论 -
pthread_cond_broadcast & pthread_cond_signal
pthread_cond_broadcast(&cond1)的作用是唤醒所有正在pthread_cond_wait(&cond1,&mutex1)的线程。pthread_cond_signal(&cond1)的的作用是唤醒所有正在pthread_cond_wait(&cond1,&mutex1)的至少一个线程。(虽然我还没碰到过多于一个线程的情况,但是man帮组手册上说的是至少一个)下面分为情况讨论一下这两个函数的效果。第一种情况:多个线程等待转载 2021-08-26 21:13:36 · 466 阅读 · 0 评论 -
prctl()函数应用
intprctl( intoption,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 )这个系统调用指令是为进程制定而设计的,明确的选择取决于option:PR_GET_PDEATHSIG :返回处理器信号;PR_SET_PDEATHSIG :arg2作为处理器信号pdeath被输入,正如其名,如果父进程不能再用,进程接受这个信号。PR_GET_DUMPABLE :返回处理器标...转载 2021-08-10 17:15:05 · 358 阅读 · 0 评论 -
Linux 多线程等待超时机制的实现:pthread_mutex_lock/pthread_cond_signal/pthread_mutex_unlock
最近在做一个项目,需要实现两个线程之间的等待超时机制。例如A线程等待B线程,需要实现等待超时机制。解决方案是利用条件变量实现。1. 条件变量 条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。一般说来,条...转载 2018-12-18 22:58:18 · 1911 阅读 · 0 评论 -
WaitForSingleObject、WaitForMulitpleObjects和SignalObjectAndWait线程同步
用户模式的线程同步机制效率高,如果需要考虑线程同步问题,应该首先考虑用户模式的线程同步方法。但是,用户模式的线程同步有限制,对于多个进程之间的线程同步,用户模式的线程同步方法无能为力。这时,只能考虑使用内核模式。Windows提供了许多内核对象来实现线程的同步。对于线程同步而言,这些内核对象有两个非常重要的状态:“已通知”状态,“未通知”状态(也有翻译为:受信状态,未受信状态)。Windows提...转载 2018-12-18 22:56:47 · 752 阅读 · 0 评论 -
pthread_cond_wait()和pthread_cond_signal() 的理解
pthread_cond_wait() 用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread_cond_...转载 2018-05-30 13:54:24 · 2297 阅读 · 0 评论 -
linux共享内存简单介绍以及编码演示
共享内存的基本概念 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。 下图是共享内存示意图: 下图是用管道或者消息队列传递数据示意图: 内核为每个IPC对象维护一个数据结构下图是用共享内存传递数据示意图:System V共享内存API:首先了解一下下面结构体str...转载 2018-06-04 15:22:11 · 381 阅读 · 0 评论 -
Linux C之多线程
线程有关的函数都在头文件#include中。一、创建线程int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void*(*start_rtn)(void),void *arg);若成功则返回0,否则返回出错编号。返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于指定各种不同的线程属性转载 2016-07-18 00:07:28 · 456 阅读 · 0 评论