线程/进程同步问题

原创 2005年05月14日 00:47:00

. 计算机网络课程实验要做一个c/s模型的文件传递程序。本来socket编程我还是比较熟悉的,因为以前用VC/MFC编过一个网络游戏——网络五子棋,并通过设置NAT与新加坡的同学对战了一把。这次的程序本来更简单,但是老师要用纯windows API来写,不准用其他的类库,于是工作的重点就转移到了怎样构建一个自己的支持异步调用的Socket类,一涉及到异步调用,肯定又得用到多线程,所以还得构建一个自己的线程类,如果有可能可以再实现一个线程池来提高运行效率。

可以看出所有问题的关键在于实现这个线程类,因为其他的都是简单的对API进行一次封装,而线程类实现的好坏将直接影响到异步调用的方便性和安全性。多线程问题中一个最头痛的问题便是进程同步。而我的线程类就要实现一个方法Thread.Join()来帮助用户同步线程,此方法将阻塞调用线程(即主进程)直到被调进程(子进程)执行完毕,从而达到同步的效果。

翻翻《windows核心编程》,找到了一个event核心对象,可以实现进程同步,模型很简单,一个线程里阻塞wait一个特定的event,直到另外一个线程set这个event,即触发这个事件。但我马上想到了一个问题,如果在主线程等待某个事件之前,子线程已经触发过了这个事件,怎么办?等待将会一直阻塞吗?由于本人一时不小心,犯了一个错误,导致了这个问题的验证过程略趋复杂了一些,在此就略去,仅将答案公布于下:不会一直锁住,如果事件已经触发了,event提供了2种复位的方法,一种是manul(人工),即显示调用函数ResetEvent,另一种是auto(自动),即第一个wait此event的线程(或进程)得到响应之后便自动复位。所以,当事件先触发而等待此事件的代码滞后时也不会导致wait无穷阻塞,因为event自己维护了一个自己的状态。

这不和Semphore(信号量)一模一样了吗?所以这个地方,如果熟悉信息量操作的话,就不必用这个event了。后来进一步发现,什么mutex,event,criticalregion都是可以靠semphore来实现的,或者说是semphore使用的一些特例。所以,要学好线程(或进程)同步问题,学好Semphore,即P,V操作才是王道!

线程/进程同步的方式和机制

线程同步机制: 临界区(Critical Section)、互斥量(Mutex)、事件(Event)、信号量(Semaphore)四种方式 1、临界区:又称阻塞,通过对多线程的串行化来访问公共资源...

(好~)windows下的线程进程同步方法

Windows 临界区,内核事件,互斥量,信号量。   临界区,内核事件,互斥量,信号量,都能完成线程的同步,在这里把他们各自的函数调用,结构定义,以及适用情况做一个总结。     一. 临...
  • yockie
  • yockie
  • 2013年08月01日 16:22
  • 947

操作系统之——进程(2)进程同步与线程

进程同步的基本概念 进程同步机制对相关进程在执行次序上进行协调,使并发的进程之间按一定规则共享资源,使程序的执行具有可再现性。 两种形式的制约关系 1.间接制约: 2.直接制约: 临界资源 ...

管程机制处理进程同步问题

进程同步机制有很多,主要有PV操作和信号量,管程,以及消息传递等。 由于PV操作的使用分散在各个进程之中,不利于对临界资源的统一管理,还有PV操作的使用需要小心,若顺序不对,或忘一个没写,很容易陷入...
  • jxm_96
  • jxm_96
  • 2016年10月10日 20:32
  • 198

操作系统之进程与线程5——进程同步与信号量

多进程除了切换和调度之外,还有相互之间的合作问题(即进程同步:多个进程共同完成一个任务),而实现进程同步的合理有序,需要靠信号量。 从进程同步提出信号 多个进程之间按照一定顺序进行,一个进程的执行可能...

管程机制处理进程同步问题

进程同步机制有很多,主要有PV操作和信号量,管程,以及消息传递等。 由于PV操作的使用分散在各个进程之中,不利于对临界资源的统一管理,还有PV操作的使用需要小心,若顺序不对,或忘一个没写,很容易陷入死...

进程同步问题

  • 2013年02月21日 04:27
  • 172B
  • 下载

进程同步读者写者问题

  • 2015年12月31日 15:13
  • 3KB
  • 下载

Linux 线程信号量,进程信号量和内核驱动程序信号量(线程同步信号量,进程同步信号量和设备驱动同步信号量)

1、进程与线程的区别      新进程创建出该进程的一份新拷贝,所有的全局变量都是都是两份,父进程子进程各一份。新进程拥有PID号,时间调度上也是独立的。      新线程拥有一个新的栈,所以他只是...

多进程同步橘子苹果问题

  • 2016年05月13日 23:39
  • 227KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程/进程同步问题
举报原因:
原因补充:

(最多只允许输入30个字)