首页 理论教育C语言中进程同步的基本方法

C语言中进程同步的基本方法

【摘要】:因为进程是并行的,而有些资源不允许同时使用,所以在访问这些资源的进程之间要求同步。表7-2全局变量读写(r/w)情况表其中bill_trans和bill_rot被两个进程所修改,需要同步处理。程序中是用bmpr划分它们在两个进程中被写的时间范围。C语言的同步处理比较很简单,系统没有提供专用的进程同步方法,前面的方法还不能做到严格意义上的同步。只要按照基本同步方法编制多进程程序,完全能够保证机器人的运行可靠。

因为进程是并行的,而有些资源不允许同时使用,所以在访问这些资源的进程之间要求同步。机器人所有的输入输出设备从逻辑上讲都是要求独占的资源,包括电动机、LCD、喇叭、红外、模拟输入等,即不能有一个设备同时被两个或两个以上的进程访问。以电动机驱动为例,如果有两个进程都调用motor设置电动机转速,在某一时刻一个让它正转,一个让它反转,那么结果可能一团糟。

编制多进程程序时如果遵循一定的原则,问题就会得到简化。第一,一种设备只在一个进程中访问,即可以一个进程访问多个设备,但不要多个进程访问同一设备。需要注意的是,碰撞传感器和光敏、麦克风一样使用了机器人的模拟输入口,这三种设备应该只在一个进程中访问。按照这一原则,程序中需要同步处理的资源就只剩下全局变量。第二,同时只能有一个进程写一个全局变量,但可以有多个进程同时读。如果多个进程都对一个全局变量有写(赋值)操作,那么必须有措施保证这些写操作不同时进行。以上一个程序为例,表7-2所示为其全局变量读写(r/w)情况表。

表7-2 全局变量读写(r/w)情况表

其中bill_trans和bill_rot被两个进程所修改,需要同步处理。程序中是用bmpr划分它们在两个进程中被写的时间范围。

C语言的同步处理比较很简单,系统没有提供专用的进程同步方法,前面的方法还不能做到严格意义上的同步。但是在机器人上,绝大部分可能出现资源冲突的地方是在控制输出上,而进程的执行周期一般在毫秒级,个别周期发生资源冲突一般不会在机器人的行为上造成可见的影响。只要按照基本同步方法编制多进程程序,完全能够保证机器人的运行可靠。