pthread

task、pthread、进程

一个人想着一个人 提交于 2020-01-10 01:21:45
最后,再说说muttx的task和pthread: nuttx支持task和pthread,二者主要的区别就是task具有更多的独立性,更像一点linux下的进程。task会创建线程,这些被创建的属于task的线程共享所属的task的资源。这个task和它的子线程一起组成的这么一个东西,称之为task group,前面说task有点类似linux下的进程,其实这个task group更像。在这个task group中,主task可以认为是主线程,它创建的线程是这个主线程的子线程,他们一起共享一些资源,如环境变量,文件描述符,FILE流,socket,消息队列等。但是也仅仅是像,并不是。进程有独立的地址空间,但是nuttx只支持线程和task在同一个地址空间。 进程和线程的关系: 进程也会因为某一步骤堵塞而影响其他步骤的执行, 引入线程,将进程个步骤拆解成哥哥线程,线程之间的切换更快,因为同一个进程下的线程共享一些资源。 来源: CSDN 作者: 干了这碗汤 链接: https://blog.csdn.net/weixin_43321489/article/details/103908926

[Linux]多线程

十年热恋 提交于 2020-01-08 23:01:14
得于斯者, 毁于斯 文章目录 1. Linux下线程概念 2. 线程控制 2.1 线程创建 2.2 线程终止 2.3 线程等待 2.4 线程分离 3. 线程安全 3.1 线程安全的实现 3.2 实现互斥 3.3 实现同步 3.3.1 条件变量实现同步 3.3.2 信号量POSIX实现同步 4. 线程池 操作系统线程概念: https://blog.csdn.net/new_bee_01/article/details/103868668 1. Linux下线程概念 2. 线程控制 POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的 要使用这些函数库,要通过引入头文<pthread.h> 链接这些线程函数库时要使用编译器命令的“-lpthread”选项 2.1 线程创建 tid作用 代码示例 create.c # include <stdio.h> # include <unistd.h> # include <stdlib.h> # include <pthread.h> void * thread_start ( void * arg ) { while ( 1 ) { printf ( "线程:%s\n" , ( char * ) arg ) ; sleep ( 1 ) ; } return NULL ; } int

gcc 编译pthread失败问题

狂风中的少年 提交于 2020-01-06 13:59:20
问题描述 /usr/bin/ld: /tmp/ccVz9LdA.o: in function `main': test.c:(.text+0xec): undefined reference to `pthread_create' /usr/bin/ld: test.c:(.text+0x11b): undefined reference to `pthread_join' collect2: 错误:ld 返回 1 解决方法: 加上 -lpthread 参数即可! 来源: CSDN 作者: 、moddemod 链接: https://blog.csdn.net/weixin_43833642/article/details/103844253

线程异常:undefined reference to 'pthread_create' 处理

安稳与你 提交于 2020-01-05 04:34:35
源代码: #include <stdio.h> #include <pthread.h> #include <sched.h> void *producter_f (void *arg); void *consumer_f (void *arg); int buffer_has_item=0; pthread_mutex_t mutex; int running =1 ; int main (void) { pthread_t consumer_t; pthread_t producter_t; pthread_mutex_init (&mutex,NULL); pthread_create(&producter_t, NULL,(void*)producter_f, NULL ); pthread_create(&consumer_t, NULL, (void *)consumer_f, NULL); usleep(1); running =0; pthread_join(consumer_t,NULL); pthread_join(producter_t,NULL); pthread_mutex_destroy(&mutex); return 0; } void *producter_f (void *arg) { while(running) { pthread_mutex

linux中线程创建简单示例

▼魔方 西西 提交于 2020-01-04 00:20:30
当前项目中涉及到多线程编程,之前搞过,但没啥记录,在此记录一下 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> void threadFunc() { int count = 0; while(count < 30) { printf("wake up : %d\n",count); count++; usleep(100000); } return; } int main() { printf("Test for mul thread\n"); pthread_t threadHandle; int ret = pthread_create(&threadHandle, NULL, (void*)threadFunc, NULL); if(ret != 0){ printf("thread create fail, ret = %d\n",ret); return ret; } int retOfThread; //pthread_join(threadHandle, (void**)(&retOfThread)); //pthread_join(threadHandle,NULL); sleep(2); printf("main come to return\n");

pthread_cond_wait学习笔记

时间秒杀一切 提交于 2020-01-01 00:24:24
近期学习了线程等待和激活的相关知识。 先介绍几个api: pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件。 一:条件变量的初始化: 条件变量和 互斥锁 一样,都有静态动态两种创建方式, 静态方式使用PTHREAD_COND_INITIALIZER 常量 初始化。 pthread_cond_t cond = PTHREAD_COND_INITIALIZER; 动态方式初始化: 1 首先要new或者malloc一个pthread_cond_t类型变量, 用完后记得delete或者free掉。 2 动态方式调用 pthread_cond_init ()函数,API定义如下: int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); 二:条件变量的销毁 注销一个条件变量需要调用pthread_cond_destroy(),只有在没有线程在该条件变量上等待的时候才能注销这个条件变量,否则返回EBUSY。 因为Linux实现的条件变量没有分配什么资源,所以注销动作只包括检查是否有等待线程。API定义如下: int pthread_cond_destroy(pthread_cond_t *cond) new开辟的pthread_cond_t记得在调用pthread

线程同步,条件变量pthread_cond_wait

混江龙づ霸主 提交于 2020-01-01 00:24:11
与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。条件变量使我们可以睡眠等待某种条件出现。 条件变量是利用线程间共享的全局变量进行同步的一种机制, 主要包括两个动作: 一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。 条件的检测是在互斥锁的保护下进行的。如果条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。 pthread_cond_wait 原子调用: 等待条件变量, 解除锁, 然后阻塞 当 pthread_cond_wait 返回,则条件变量有信号,同时上锁 等待条件有两种方式: 条件等待pthread_cond_wait()和计时等待pthread_cond_timedwait(), 其中计时等待方式如果在给定时刻前条件没有满足,则返回ETIMEOUT 无论哪种等待方式,都必须和一个互斥锁配合,以防止多个线程同时请求pthread_cond_wait() (或pthread_cond_timedwait(),下同)的竞争条件(Race Condition)。 mutex互斥锁必须是普通锁(PTHREAD_MUTEX_TIMED_NP)或者适应锁(PTHREAD_MUTEX_ADAPTIVE_NP), 且在调用pthread_cond_wait()前必须由本线程加锁

深入理解pthread_cond_wait、pthread_cond_signal

陌路散爱 提交于 2020-01-01 00:23:10
转自:http://blog.csdn.net/yeyuangen/article/details/37593533 ===============================man pthread_cond_wait的解释========================== LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数。但这个函数的执行过程比较难于理解。 pthread_cond_wait()的工作流程如下(以MAN中的EXAMPLE为例): Consider two shared variables x and y, protected by the mutex mut, and a condition vari- able cond that is to be signaled whenever x becomes greater than y. int x,y; pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; Waiting until x is greater than y is performed as follows: pthread_mutex

信号量与条件变量的区别

。_饼干妹妹 提交于 2020-01-01 00:22:59
注意信号量与条件变量的区别 信号量内容可见:http://www.cnblogs.com/charlesblc/p/6142868.html 信号量、共享内存,以及消息队列等System V IPC三剑客主要关注 进程间通信 ; 而条件变量、互斥锁,主要关注 线程间通信 。 下面内容参考: http://blog.chinaunix.net/uid-27164517-id-3282242.html pthread_cond_wait指的是 条件变量 ,总和一个 互斥锁结合使用 。在 调用pthread_cond_wait前要先获取锁 。pthread_cond_wait函数执行时先 自动释放 指定的锁,然后等待条件变量的变化。在函数调用返回之前,自动将指定的互斥量 重新锁住 。 int pthread_cond_signal(pthread_cond_t * cond); pthread_cond_signal通过条件变量 cond发送消息 ,若多个消息在等待,它 只唤醒一个 。 pthread_cond_broadcast可以唤醒所有。调用pthread_cond_signal后要 立刻释放互斥锁 ,因为pthread_cond_wait的最后一步是要将指定的互斥量重新锁住,如果pthread_cond_signal之后没有释放互斥锁,pthread_cond_wait仍然要阻塞

生产者消费者模型模版

非 Y 不嫁゛ 提交于 2019-12-31 03:30:40
#include <stdio.h> #include <pthread.h> #include <segypkg.h> pthread_cond_t notEmpty=PTHREAD_COND_INITIALIZER; pthread_cond_t notFull =PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER; int full=0; int empty=1; int iadd=0; int iremove=0; int n; int n1,n2; int nsum; #define NELEM 100 int list[NELEM]; void *io_thread(void *arg); void *sum_thread(void *arg); segy trio,tr1,tr2; double dtr1[2000],dtr2[2000]; unsigned char *buf; int trsz=(sizeof(float)*2000+240); typedef struct { int id; int *result; }sum_thread_t; int main(int argc,char *argv[]) { pthread_t tio; pthread_t