线程/进程同步问题

原创 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操作才是王道!

操作系统(经典进程同步问题)之写者优先

一个数据文件或记录可以被多个进程共享使用,我们将读文件的进程称为reader,写文件的进程成为writer。允许对个进程同属进行读取一个共享对象,因此读操作不会造成数据数据文件的混乱,但不允许read...
  • cbcxvbfxgb
  • cbcxvbfxgb
  • 2017年03月27日 17:57
  • 1361

进程同步和线程同步

怎样同步多个线程或多个进程的活动。为允许在线程或进程间共享数据,同步是必需的。          互斥锁和条件变量是同步的基本组成部分。互斥锁和条件变量出自POSIX.1线程标准,它们总是可用来同步一...
  • u013074465
  • u013074465
  • 2015年05月30日 09:53
  • 3334

经典进程的同步问题自我总结

三个同步问题 - 生产者-消费者问题 - 哲学家进餐问题 - 读者-写者问题生产者-消费者问题 注:所有的都是,当缓冲池满了,生产者就不可往进存放,必须等待;当缓冲池空了,消费者就不可从...
  • anyao112233
  • anyao112233
  • 2017年01月04日 22:21
  • 450

经典进程的同步问题

操作系统进程同步问题的一些经典例子学习。
  • m0_37983568
  • m0_37983568
  • 2017年04月05日 15:43
  • 481

进程同步问题-锁线程

* 处理进程同步问题 * 多个线程访问同一个资源时保证一个线程在一段操作结束前独占cpu * 锁线程 synchronized...
  • Leon_ang
  • Leon_ang
  • 2017年05月22日 17:00
  • 113

Linux并发(控制线程不撞车的红绿灯)

信号量就是代码世界里的红绿灯,没有它,许多代码横冲直撞必将导致严重的“车祸”。   拓展: LINUX中可能用到的信号量有3种: Ststem-V信号量POSIX有名信号量PO...
  • vincent040
  • vincent040
  • 2016年03月22日 10:09
  • 387

操作系统之——进程同步经典问题

点击打开链接生产者消费者问题 一个生产者,一个消费者,公用一个缓冲区 定义两个同步信号量: empty——表示缓冲区是否为空,初值为1。 full——表示缓冲区中是否为满,初值为0。 生...
  • qq_26888929
  • qq_26888929
  • 2016年12月05日 21:20
  • 873

Linux--父子进程同步协作

以下代码是父子进程交替打印变量counter的值。由于fork之后子进程会复制父进程的堆栈,信号处理函数,信号屏蔽字,在下面的程序会根据counter的不同初值进行分别。 #include #inc...
  • zhang45596961
  • zhang45596961
  • 2017年03月06日 14:57
  • 403

进程同步问题的几个案例

1、设公共汽车上,司机和售票员的活动分别是:  司机的活动: 启动车辆;              正常行车;              到站停车;  售票员的活动:  关车门;     ...
  • baidu_20363843
  • baidu_20363843
  • 2017年04月10日 11:19
  • 726

经典进程同步问题:读者-写者问题

问题描述 有读者和写者两组并发进程,共享一个文件,当两个或以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误。因此要...
  • qq_33096883
  • qq_33096883
  • 2017年01月08日 16:48
  • 492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程/进程同步问题
举报原因:
原因补充:

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