线程控制之条件变量 标签: 线程的可结合和分离 上一次我写了互斥锁,这次来写一下总能用到互斥锁的条件变量. 因为要保证条件变量能被正常的修改,条件变量就要受到特殊保护,实际使用的过程中互斥锁扮演者这样一个必不可少的保护者的角色. 条件变量是利用线程间共享的全局变量进行同步的一种机制.(条件变量宏观上类似于if语句,符合条件就能执行某段程序,否则只能等待条件成立 ) 使用条件... 作者:kkkkde 发表于 2018/08/13 08:17:03 原文链接 https://blog.csdn.net/kkkkde/article/details/81623559 阅读:48 继续阅读 >>


胡锦雲 18/08/13 08:17:03
线程最大的特点就是资源的共享性,而资源共享中同步问题是多线程编程的难点. Linux系统提供了多种方式处理线程间的同步关系,其中最常用的就是互斥锁,条件变量和异步信号.下面就来让我们看看这些都是怎么用的吧(ˇˍˇ) (一)互斥锁 举个栗子: 假如现在有一个办公室每次只能进一人,你现在要在这个房间奋斗早早完成工作好把工作室让给别人用-.- 但是由于工作需求,你在进行工作的时候会不停进出... 作者:kkkkde 发表于 2018/08/10 11:30:58 原文链接 https://blog.csdn.net/kkkkde/article/details/81560327 阅读:34 继续阅读 >>


胡锦雲 18/08/10 11:30:58
守护进程 标签: Linux系统编程之进程 Daemon(守护进程)是运行在后台的一种特殊进程.没有控制终端与之相连. 特点:独立于终端控制,周期性地执行某种任务 守护进程启动方式: 从启动脚本/etc/rc.d; 由作业规划crond启动; 又用户终端(通常是shell)执行 编写守护进程要点: * 让程序在后台执行.方法是fork产生一个子进程,然后使得父进程退出. pid_... 作者:kkkkde 发表于 2018/07/31 09:30:25 原文链接 https://blog.csdn.net/kkkkde/article/details/81296197 阅读:33 继续阅读 >>


胡锦雲 18/07/31 09:30:25
简化版chmod命令 标签(空格分隔): Linux —使用系统调用实例 在实现之前首先说一下#include< 一个简单的系统编程: #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> int main(int arg... 作者:kkkkde 发表于 2018/07/30 00:36:59 原文链接 https://blog.csdn.net/kkkkde/article/details/81278267 阅读:88 继续阅读 >>


胡锦雲 18/07/30 00:36:59
标签: Linux系统编程 Linux下系统编程是什么? 程序员使用系统调用或c语言本身所携带的库函数来设计和编写具有某一特定功能的程序,就为系统编程。(比如下文中我自己写的my_chmod指令) 系统调用是什么? 系统调用是操作系统提供给程序员使用的接口,(如作为系统调用提供的open函数用于打开一个文件,又如c语言的函数库也是系统调用实现的,只不过它封装了系统调用,并在此基础上... 作者:kkkkde 发表于 2018/07/30 00:21:52 原文链接 https://blog.csdn.net/kkkkde/article/details/81278145 阅读:90 继续阅读 >>


胡锦雲 18/07/30 00:21:52
标签: Linux系统调用编程 目录的创建和删除 目录的创建可以由mkdir系统调用来实现 其函数原型为 #include<sys/types.h> #include<sys/stat.h> int mkdir (const char *pathname, mode_t mode); mkdir创建一个新的空目录。空目录中自动创建. 和 .. 目录项 所... 作者:kkkkde 发表于 2018/07/29 23:22:16 原文链接 https://blog.csdn.net/kkkkde/article/details/81277171 阅读:51 继续阅读 >>


胡锦雲 18/07/29 23:22:16
信号处理 一、信号的捕捉和处理 1、signal函数 signal函数用来设置进程在接收到信号时的动作 #include <signal.h> typedef void (*sighandler_t) (int); sighandler_t signal(int signum, sighandler_t handler); signal根据参数signum指定的信号编号来设置该信号的处理函数,当指定的信号到达时就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针,则必须时常数SIG_IGN(忽略该信号)或SIG_DFL(对该信号执行默认操作)。handler是一个函数指针,它所指向的函数的类型时sighandler_t,即它所指向的函数有一个int型参数,且返回值的类型为void。 signal函数执行成功时返回以前的信号处理函数指针,当有错误发生时返回SIG_ERR(即 -1)。 2、sigaction函数 sigaction函数可以用来检查或设置进程在接收到信号时的动作 #includ 继续阅读 >>


闫钰晨 16/10/07 18:09:19
Linux信号介绍 一、信号解释 信号是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式。在linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某进程发生了什么事件,还可以给进程传递数据。 二、信号的来源 硬件方式 1.当用户在终端上按下某些键时,将产生信号。 2.硬件异常产生信号:除数为0,无效的存储访问等。这些事件通常由硬件(如CPU)检测到,并将其通知给Linux操作系统内核,然后内核生成相应的信号,并把信号发送给该时间发生时正在运行的程序。 软件方式 1.用户在终端下调kill命令向进程发送任意信号。 2.进程调用kill或sigqueue函数发送信号。 3.当检测到某种软件条件已经具备时发出信号,如由alarm或settimer设置的定时器超时时将生成SIGALRM信号。 三、信号的种类 1、可靠信号与不可靠信号 SIGHUP(1号)至SIGSYS(31号)之间的信号都是继承自UNIX系统,是不可靠信号。Linux系统根据P 继续阅读 >>


闫钰晨 16/10/07 15:01:21
一、私有数据 1.特殊的变量 多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共有。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在某个线程内部有效。举例来说,errno它返回标准的出错代码,errno不应该为局部变量,几乎每个函数都应该可以访问它,但它又不能为全局变量,否则在一个线程里输出的很可能是另一个线程的出错信息。这个问题可以通过创建线程的私有数据(Thread-specific Data ,或TSD)来解决。 2.TSD池(关键数据结构数组) 创建一个TSD就相当于将结构体数组中的某一项设置为”in_use”,并将其索引返回给*key,然后设置destructor函数为destr_function。 3.一键多值 线程私有数据采用了一键多值的技术,。访问数据时都是通过键值来访问。操作线程私有函数的主要函数有4个 #include <pthread.h> int pthread_key_creat(pthread_key_t *key, void (*destr func 继续阅读 >>


闫钰晨 16/08/04 11:35:30
一、线程 1.线程是什么 线程是计算机中独立运行的最小单位,运行时占用很少说的系统资源。 2.线程的优点 多线程相对于多进程的优点 [1].多进程的情况下,每个进程都有自己独立的地址空间,而多线程情况下,同一进程内的线程共享进程的地址空间。因此创建一个新的进程时就要耗费时间来为其分配系统资源,而创建一个新的线程花费的时间则要少的多。 [2].在系统调度方面,由于进程地址独立而线程共享地址空间,线程间的切换速度要远远快过进程间的切换速度。 [3].在通信机制方面,进程间的数据空间相互独立,彼此通信要以专门的通信方式进行,通信时必须经过操作系统。而同一进程内的多个线程共享数据空间,一个线程的数据可以直接提供给其他线程使用,而不必经过操作系统。因此,线程间的通信更加方便和省时。 线程还具有如下优点 [4].可以提高应用程序的响应速度。 [5].可以提高多处理器效率。 [6].可以改善程序的结构。 3.线程私有的数据、 虽然线程在进程内部共享地址空间,打开文件描述符等资源,但是线程也有其私有的数据信 继续阅读 >>


闫钰晨 16/08/03 10:30:22