操作系统实验一:并发程序设计

---恢复内容开始---

一、实验目的

1)加深对进程并发执行的理解,认识多进程并发执行的实质。

2)观察进程共享资源的现象,学习解决进程互斥和同步的方法。

 

二、实验要求:

本实验要求用高级语言,启动多进程并发运行,设计相应代码,显示进程无关并发、进程共享变量并发的运行结果。并完成实验报告。

  

三、实验内容:

分别实现以下四种情况的并发:

1.并发的进程之间无关,显示进程名称,开始与结束时间。

模拟多终端售票情况,并发的多个终端进程之间共享剩余票数这个共享变量。

2.用全局变量实现。

3.用进程间共享数据机制实现。

4.用进程间共享数据机制和加锁机制实现。

 

四、实验过程与结果

  1. 算法思想与设计
  2. 算法实现代码
  3. 运行结果
public class ThreadTest3 {
	public static void main(String[] args) {
		Shop shop = new Shop();
		for (int i = 1; i <= 5; i++) {
			new Thread(shop,"").start();
		}
	}
}

class Shop implements Runnable{
	String name;
	ticket t;
	
	public Shop() {
		t.total = 100;
		t.count = 0;
		}

	public void run() {
		while (t.total>0) {
			synchronized (this) {
				try {
					Thread.sleep(new Random().nextInt(1000));
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName()+"_____"+t.count);
				t.total--;
				t.count++;
			}	
		}

	}
}

class ticket {
	int total;
	int count;
}

  

通过共享变量实现

import os
import threading

tickis=1000  

lock=threading.Lock() 


def sale_tickis(thread_name):

    global tickis 
    global lock
   
    while 1:
        lock.acquire()
        if tickis!=0:
            tickis-=1
            print(thread_name,"余票为:",tickis)
        else:
            print(thread_name,"票卖完了")
            os._exit(0)  
        lock.release()


class my_thread(threading.Thread):

    def __init__(self,name=""):
       
        threading.Thread.__init__(self)
        self.name=name
    
    def run(self):
        sale_tickis(self.name)


if __name__=="__main__":
    for i in range(1,21):
        thread = my_thread("线程" + str(i))
        thread.start() 

 

posted @ 2019-05-19 22:27  宋万里  阅读(831)  评论(0编辑  收藏  举报