随笔分类 -  linux / linux线程

摘要:线程和信号: 阅读全文
posted @ 2023-03-27 23:04 踏浪而来的人 阅读(11) 评论(0) 推荐(0) 编辑
摘要:同步: //account.h #ifndef _ACCOUNT_H #define _ACCOUNT_H #include <pthread.h> #include <semaphore.h> typedef struct{ int code; double balance; //定义一把互斥锁, 阅读全文
posted @ 2023-03-26 23:23 踏浪而来的人 阅读(12) 评论(0) 推荐(0) 编辑
摘要://reader_writer.c #include <pthread.h> #include <stdio.h> #include <unistd.h> /* 写者写完通知读者去读 读者读完通知写者去写 */ typedef struct{ int value; int r_wait; pthre 阅读全文
posted @ 2023-03-26 22:45 踏浪而来的人 阅读(15) 评论(0) 推荐(0) 编辑
摘要://account.h #ifndef _ACCOUNT_H #define _ACCOUNT_H #include <pthread.h> typedef struct{ int code; double balance; //定义一把互斥锁,用来对多线程操作的银行账户(共享资源)进行加锁(保护) 阅读全文
posted @ 2023-03-26 18:27 踏浪而来的人 阅读(10) 评论(0) 推荐(0) 编辑
摘要://account.h #ifndef _ACCOUNT_H #define _ACCOUNT_H #include <pthread.h> typedef struct{ int code; double balance; //定义一把互斥锁,用来对多线程操作的银行账户(共享资源)进行加锁(保护) 阅读全文
posted @ 2023-03-26 17:14 踏浪而来的人 阅读(35) 评论(0) 推荐(0) 编辑
摘要:CPU对变量的计算分为三个步骤: 1. 从内存读取变量到寄存器(如add寄存器) 2. 将读取到的变量进行计算 3. 将寄存器中计算的值写入内存 如有两个线程(线程1和线程2)对共享资源(全局变量)a=0进行自增操作(a++),可能出现如下情况: 线程1进行a++时,会将变量a读取寄存器,在对变量a 阅读全文
posted @ 2023-03-26 10:46 踏浪而来的人 阅读(98) 评论(0) 推荐(0) 编辑
摘要:原因: 如有两个线程,两把互斥锁,线程1先对互斥锁A上锁,延时,然后在对互斥锁B上锁;二线程2先对互斥锁B上锁,延时,再对互斥锁A上锁,这样就会死锁,因为两线程以不同顺序拿到了对方的锁,并且不能解锁; 解决方式: 1. 以相同的顺序加锁 2. 使用pthread_mutex_trylock()函数 阅读全文
posted @ 2023-02-26 23:02 踏浪而来的人 阅读(12) 评论(0) 推荐(0) 编辑
摘要:线程信号量可以实现线程的互斥和线程的同步。 信号量的数据类型:sem_t 信号量本质上是一个非负整数计数器,是共享资源的数目(即共享资源还剩下几个,信号量的值大于或等于0时,线程才不阻塞) 信号量的创建和销毁: 参数: sem:信号量指针 pshared:是否在进程之间共享;0为不共享,1为共享 v 阅读全文
posted @ 2023-02-26 22:50 踏浪而来的人 阅读(114) 评论(0) 推荐(0) 编辑
摘要:1. 条件变量(通互斥锁一起使用,互斥锁用来保护等待队列的) 2. 线程信号量 条件变量: 条件变量的内部是一个等待队列,这个队列中放置阻塞的线程,线程在这个队列中等待通知。 因为这个等待队列也时一个共享资源,所以也要用一把互斥锁来保护,即对等待队列上锁。 队列中的线程等特定的条件发生,当条件不满足 阅读全文
posted @ 2023-02-26 21:10 踏浪而来的人 阅读(16) 评论(0) 推荐(0) 编辑
摘要:1. 互斥锁 2. 读写硕 3. 线程信号量 互斥锁: 互斥锁的数据类型:pthread_mutex_t 互斥锁是一种加锁的方法来控制对共享资源的访问。同一时刻只能由一个线程掌握某个互斥锁(就是有一把互斥锁),一个线程对共享资源上锁了,其他线程希望上锁一个已经上了互 斥锁的共享资源,那么这些线程将会 阅读全文
posted @ 2023-02-26 10:33 踏浪而来的人 阅读(148) 评论(0) 推荐(0) 编辑
摘要:互斥: 相互排斥,表示线程对共享资源的访问时相互排斥的,即不能同时操作(一个线程对共享资源写时,另外一个线程不能再对这个共享资源进行读写),保证线程的安全,互斥不能保证 线程执行的先后顺序 实现互斥的方式: 互斥锁 读写锁 线程信号量 同步: 包含了互斥,即既保证了线程的安全,又能保证线程执行的先后 阅读全文
posted @ 2023-02-26 09:25 踏浪而来的人 阅读(33) 评论(0) 推荐(0) 编辑
摘要:线程的属性实现线程创建的时候(pthread_create)指定 线程属性的初始化和销毁 线程属性的结构: 如果线程设置了分离状态这个属性,那么可以在线程结束时,主线程不用调用pthreat_join函数来回收这个线程的资源,他会自动回收 获得和设置分离属性: 阅读全文
posted @ 2023-02-22 23:13 踏浪而来的人 阅读(21) 评论(0) 推荐(0) 编辑
摘要:状态转换: 阅读全文
posted @ 2023-02-22 22:33 踏浪而来的人 阅读(10) 评论(0) 推荐(0) 编辑
摘要:当线程调用pthread_exit函数时,如果execute为非0,将执行线程push的清理函数 注意: push和pop函数是成对存在的,先push的清理函数后调用 阅读全文
posted @ 2023-02-22 22:30 踏浪而来的人 阅读(15) 评论(0) 推荐(0) 编辑
摘要:线程终止的方式: 1. 主动终止 a. 线程运行函数中调用return b. 线程中调用pthread_exit函数 2. 被动终止 线程可以被同一进程的其他线程取消,其他线程调用pthread_cancel函数 不管在哪个线程中调用exit()、_exit、_Exit函数,进程都会终止 阅读全文
posted @ 2023-02-22 22:16 踏浪而来的人 阅读(25) 评论(0) 推荐(0) 编辑
摘要:pthread_creat函数 头文件: #include <pthread.h> 函数原型: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), voi 阅读全文
posted @ 2023-02-22 21:17 踏浪而来的人 阅读(13) 评论(0) 推荐(0) 编辑
摘要:所有进程共享3~4G的内核空间,所以基于内核之间的通信能够实现(为了保证安全,每个进程的用户地址空间都是独立的,一般而言一个进程不能直接访问另一个进程的地址空间,不过内核空间是每个进程都共享的,所以进程之间想要进行信息交换就必须通过内核)。 线程之间的通信: 1. 不同进程的线程之间要进行通信,那就 阅读全文
posted @ 2023-02-21 16:24 踏浪而来的人 阅读(22) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示