为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作。比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进行数据写入,那么怎么才能保证一个进程在写入的过程中不被其它的进程打断,保证数据的完整性呢?又怎么保证读取进程在读取数据的过程中数据不会变动,保证读取出的数据是完整有效的呢? 常用的同步方式有: 互斥锁、条件变量、读写锁、记录锁(文件锁)和信号灯。。1、互斥锁顾名思义,锁是用来锁住某种东西的,锁住之后只有有钥匙的人才能对锁住的东西拥有控制权(把锁砸了,把东西偷走的小偷不在我们的讨论范围了)。所谓互斥 Read More
posted @ 2014-02-18 19:49 Trace... Views(245) Comments(0) Diggs(0) Edit
mutex是一个互斥锁对象,互斥锁是为了防止多线程同时修改某一公共资源,我在下面的程序里把它“锁”在了一个叫buffer[10]的缓冲区 上,模型是2个Reader和2个Writer,Reader要等到叫buffer的书架上有书的时候才可以read,而Writer也必须在书架没有放 满的情况下才可以把新写的书放到书架上。我的程序里书架的大小是1,当然也可以设置书架的大小,不过实现过程大同小异。就不多说了。来看程序:#i nclude #i nclude void reader_function(void);void writer_function(void);char buffer[10]={ Read More
posted @ 2014-02-18 19:31 Trace... Views(300) Comments(0) Diggs(0) Edit
wait()与waitpid()用于等待进程结束#include pid_t wait(int *statloc); //参数获取终止状态pid_t waitpid(pid_t pid, int *statloc, int options); //pid==-1时,与wait()等效。 当一个进程正常或异常结束时,内核就向其父进程发送SIGCHLD信号。 如果所有子进程都还在运行,则阻塞。 如果一个子进程终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回。 如果没有子进程,则立即出错返回。 区别: 在一个子进程终止前,wait使其调用者阻塞,而wia... Read More
posted @ 2014-02-18 19:13 Trace... Views(1211) Comments(0) Diggs(0) Edit
1、信号量(Semaphores) System V的信号量集表示的是一个或多个信号量的集合。内核为每个信号量集维护一个semid_ds数据结构,而信号量集中的每个信号量使用一个无名结构体表示,这个结构体至少包含以下成员: struct{ unsigned short semval;//信号量值,总是>=0 pid_t sempid; //上一次操作的pid … }; #include #include #include (1)创建或访问信号量 * int semget(key_t key,int ns... Read More
posted @ 2014-02-18 18:45 Trace... Views(241) Comments(0) Diggs(0) Edit