linux_线程
now
讀书会上瘾
展开
-
linux——条件控制实现线程的同步
传递给pthread_cond_wait的互斥量对条件进行保护,调用者把锁住的互斥量传给函数。函数把调用线程放到等待条件的线程列表上,然后对互斥量解锁,这两个操作都是原子操作。这样就关闭了条件检查和线程进入休眠状态等待条件改变这两个操作之间的时间通道,这样线程就不会错过条件的任何变化。条件变量与互斥变量一起使用时,允许线程以无竞争的方式等待特定的条件发生。线程在改变条件状态前必须首先锁住互斥量,其他线程在获得互斥量之前不会察觉到这种改变,因为必须锁定互斥量以后才能计算条件。linux生产者&消费者问题。原创 2023-04-19 09:57:47 · 56 阅读 · 0 评论 -
linux——什么情况造成死锁
死锁:代码中有多把锁,由于互斥锁使用不当造成代码无法运行的状态(两个线程都需要拿锁,谁都不愿意解锁。卡住了,造成整个程序停滞不前)在这里func1拿着锁mutex,需要拿锁mutex2;func2拿着锁mutex2,需要拿锁mutex;实例:线程1拿不到锁2,线程2拿不到锁1,造成死锁。编译运行结果:造成死锁,ctrl+c退出进程。只有1把锁的情况下是不会造成死锁的。原创 2023-04-17 23:44:49 · 111 阅读 · 0 评论 -
linux——互斥锁限制共享资源的访问
注:ctrl+c杀不了test程序,ctrl+c杀的是a.out代码运行的程序;需要重新ALT+CTRL+T重新开个窗口→ps -aux|grep test找到test进程pid号→kill -9 pid:杀掉测试程序从而阻止循环。chmod +x test.sh:将test.sh文件改为可执行状态。编译:gcc test.c -o test:生成test可执行文件。运行结果:当运行到g_data=3时退出整个进程。运行结果:将以上结果运行3次。./test.sh:运行。以上测试结果循环100遍。原创 2023-04-17 22:58:28 · 70 阅读 · 0 评论 -
linux——与互斥锁相关api
如果调用pthread_mutex_trylock时互斥量处于未锁住状态,那么pthread_mutex_trylock将锁住互斥量,不会出现阻塞并返回0,否则pthread_mutex_trylock就会失败,不能锁住互斥量,而返回EBUSY。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变成可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量。原创 2023-04-17 19:44:44 · 80 阅读 · 0 评论 -
linux——线程共享内存空间
有的时候能捕获到全局变量==3,退出线程t1;有的时候捕获不到,t1无法退出。在上一个线程操作后依次加1。原创 2023-04-14 19:14:26 · 115 阅读 · 0 评论 -
linux——线程初识
它被包含在进程中,是进程中的实际运作单位。一条线程指的是进程中一个单顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同任务。父进程创建子进程:父进程具有独立的数据空间(代码段、数据段、栈堆、参数),子进程也具有自己独立的数据空间(子进程进行了拷贝,写实拷贝)进程是程序执行时的一个实例,是担当分配系统资源(cpu时间、内存等)的基本单位。在面向线程的系统设计中,进程充当线程的单位。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。原创 2023-04-14 12:26:56 · 60 阅读 · 0 评论 -
linux——线程开发api概要
新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg。如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。在这种情况下,调用pthread_join函数将等待指定的线程终止,但并不获得线程的终止状态。attr参数用于定制各种不同的线程属性,暂可以把它设置为NULL,以创建默认属性的线程。调用这个函数的线程将一直阻塞,直到指定的线程调用pthread_exit、从启动里程中返回或者被取消。原创 2023-04-14 16:37:34 · 145 阅读 · 0 评论