线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。
1、互斥锁(mutex)
通过锁机制实现线程间的同步。同一时刻只允许一个线程执行一个关键部分的代码。
int pthread_mutex_init(pthread_mutex_t *mutex,const pthre...
分类:
编程语言 时间:
2015-07-11 09:09:12
阅读次数:
151
??
前段时间学习了一些关于进程的一些知识,其中分为了三个部分:进程环境、进程关系、进程控制。下边是我做的思维导图和相关理解。由于缺乏实践,对于其中很多地方理解的还不够深入。
思维导图:
进程环境:
1、启动/终止:关于进程的环境,首先是对于进程整个环境的总体认识,通过分析C语言的启动和终止,讲解了关于进程是如何启动和终止的。2、环境表:说明了对于每...
分类:
系统相关 时间:
2015-07-09 17:58:47
阅读次数:
235
首先,说说我们为什么要安装cygwin吧,长期在win7下开发的人员可能不习惯使用unix系统,但由于工作问题,你又被逼要在unix环境下开发,那该如何是好啊?但现在你不用再纠结了,因为有cygwin可以帮你。那么cygwin如何是何方神圣。其实cygwin是一个windows平台上的unix模拟环...
一、线程概念
如果进程需要完成多个任务的时候,需要对其进行串行化操作。而如果其中一个任务(比如io操作),造成任务执行的挂起。则可以分解任务,将任务分开执行。
其中的每个任务就是所谓的线程。
线程包含了表示进程内执行环境必需的信息。
进程的所有信息对该进程的所有线程都是共享的。包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。
二、线程创建
新增的线程可以...
分类:
编程语言 时间:
2015-07-01 18:32:58
阅读次数:
126
strace和ltrace分别对应的是系统调用和库函数调用,
系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件。
而库函数调用则面向的是应用开发的,相当于应用程序的api,常见的lib有openssl、libxml等。
前者属于内核层,后者属于用户层,下面有其层次对应图
引用《UNIX环境高级编程》对这两个概念的区别描述如下:...
分类:
其他好文 时间:
2015-07-01 18:23:07
阅读次数:
241
一、wait()函数
当一个进程中调用wait()函数的时候
(1)如果其所有的子程序都还在运行,则阻塞
(2)如果一个子进程已终止,则等待父进程获取其终止状态。
(3)如果没有子进程,则返回错误。
下面的实例中,在父进程中调用wait(),如果子进程还没有运行完毕,则将自己调入阻塞状态。
等待子进程运行结束后,将子进程的资源回收后,自己再运行。
#include
#inc...
分类:
系统相关 时间:
2015-06-28 23:05:44
阅读次数:
193
1、main()函数
c语言总是从main()函数开始执行的,内核执行c语言程序时候,在调用main前先调用一个特殊的启动例程。启动例程来启动main()函数
2、进程终止
(1)从main()返回
(2)调用exit()
(3)调用_exit或者_Exit
(4)最后一个线程从其启动例程返回
(5)最后一个线程调用pthread_exit
3、命令行参数
mai...
分类:
系统相关 时间:
2015-06-28 11:18:10
阅读次数:
210
一、文件描述符
对于内核,通过文件描述符来管理文件。什么是文件描述符?
在unix中,用open或者create建立几个文件时候,内核向进程返回一个整数,用来记录此文件。
以后对文件进行操作的时候,就用此文件描述符做引用。
二、open函数
open函数用于建立一个文件,函数返回文件描述符。
[cpp] view
plaincopy
#incl...
分类:
其他好文 时间:
2015-06-22 17:58:46
阅读次数:
128
1.read函数
调用read函数从文件去读数据,函数定义如下:
[cpp] view
plaincopy
#include
ssize_t read(int filedes, void* buff, size_t nbytes);
第一个变量代表文件描述符,如果是标准输入STDIN_FILENO
第二个变量代表从文件中读进bu...
分类:
其他好文 时间:
2015-06-22 17:54:59
阅读次数:
154