Linux
文章平均质量分 74
Linux系统知识
Weij.
道阻且长,行则将至
展开
-
硬链接、符号链接
在Linux文件系统下,保存在磁盘分区的文件,不管是什么类型,都给它分配一个编号,叫做索引节点编号inode。,硬链接的作用就是允许一个文件拥有多个有效路径名,这样,就可以将硬链接建立到重要文件上,(反之,删除原文件后,硬链接文件也依旧能打开),但是inode都指向同一个文件内容;原创 2023-11-04 13:19:51 · 54 阅读 · 1 评论 -
多线程的互斥与同步:条件变量
用条件变量结合互斥锁来实现互斥和同步的大致过程:一个线程用pthread_cond_wait()函数将自己插入到条件变量的等待队列里,等待其他线程用pthread_cond_signal()或pthread_cond_broadcast()来唤醒自己,从而实现对临界资源的互斥和同步访问。(2)thread_write先执行,先上锁,然后更改临界资源后,在while循环里判断读线程是否准备好,如果循环结束,即代表读线程已经被准好读,那么将用broadcast来唤醒处于等待队列里的读线程。原创 2023-09-01 14:28:37 · 70 阅读 · 1 评论 -
互斥锁和读写锁
因为一个进程中的所有线程共享进程的地址空间,所以要求对临界资源的访问要做到互斥和同步;使用互斥锁、读写锁可以实现线程间对临界资源访问时的互斥。原创 2023-08-31 20:30:57 · 74 阅读 · 0 评论 -
多线程:死锁
结果分析:在thread1运行3s后,主线程向thread1发送了终止信号,互斥锁资源被销毁,所以thread2再也获得不了互斥锁,一直阻塞,造成死锁。结果分析:在线程第一次持有互斥锁后,没有释放互斥锁,若再次试图持有互斥锁,线程就被阻塞,形成死锁。原创 2023-08-31 20:29:15 · 64 阅读 · 1 评论 -
线程对pthread_cancel()响应
一个线程可以用pthread_cancel()来向一个指定的线程发送终止信号,接受终止信号的线程可以设置对此信号的响应:(1)用pthread_setcancelstate()来决定该信号;(2)用pthread_setcanceltype()来决定(延迟响应/立即响应);(3)用pthread_cleanup_push()和pthread_cleanup_pop()设置线程终止前的。原创 2023-08-30 21:14:10 · 151 阅读 · 0 评论 -
线程的资源回收
创建的线程由谁回收来回收资源由线程本身的属性相关;分离属性的线程,由系统自动回收,连接属性的线程由函数pthread_join()来回收。(1)在创建线程时, int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);如果第二个参数设置为NULL的话,那么创建的线程默认就是连接属性。(2)想要把线程设置为分离属性的话,有两种方式;原创 2023-08-30 15:03:24 · 196 阅读 · 0 评论 -
linux多线程
(向线程发送终止信号后,并不一定会使的线程终止,可以用int pthread_setcancelstate(int state, int *oldstate)函数来设置线程对终止信号的响应,第一个参数state为PTHREAD_CANCEL_ENABLE(缺省)时执行终止信号,为PTHREAD_CANCEL_DISABLE时忽略终止信号继续执行,第二个参数不为NULL时,就用oldstate保留线程的状态信息。函数功能:使调用此函数的线程被挂起,等待线程id为thread的线程终止后,回收这个线程的资源;原创 2023-08-30 08:46:54 · 29 阅读 · 0 评论 -
进程间通信IPC-消息队列
在Linux下,IPC对象是指消息队列、共享内存、信号量,如果用户想要利用IPC对象进行进程间通信的话,首先需要为IPC对象申请对应的资源,即该对象的key值和id,key值可以理解为文件操作里面的文件路径名,而id号可以理解为文件操作里面的文件描述符。原创 2023-08-25 17:47:25 · 55 阅读 · 1 评论 -
Linux系统信号集
创建一个子进程,父进程将SIGUSR1加入到信号集中,判断信号在不在信号集中,再设置该信号为阻塞状态,该状态持续10s,10s解除阻塞,看看会不会响应信号?如果一个进程会收到多个信号,但是进程正在执行其他任务,需要执行完当前任务再去处理这些信号,那么可以使用信号集将收到的所有信号设置为阻塞态,等到解除阻塞,再去执行收到的信号。信号集是一个集合,而每一个成员都是一个信号,通过将信号加入到信号集中,再设置阻塞状态给信号集,那么整个信号集里面的信号都是阻塞状态。//将signum信号加入信号集。原创 2023-08-25 10:46:45 · 99 阅读 · 1 评论 -
进程间通信-信号
void signal_handle(int arg) //arg为signal捕捉到的信号值break;pid_t id;//父进程捕捉信号if(SIG_ERR == signal(SIGUSR1, signal_handle)) //捕捉信号函数是全局有效的exit(1);//父进程阻塞等待子进程终止。原创 2023-08-23 21:25:10 · 32 阅读 · 1 评论