多线程 操作系统-关于操作系统多线程编程

问题描述

关于操作系统多线程编程

10个洗碗工在池子里洗澡,池子只能容下5个人同时洗,每个人每次洗碗的时间在30-50秒之间随机,每个洗碗工就是不停的取碗然后去池子洗碗,如此循环。如果池子里已经有5个人了,其他的洗碗工就只能等池子里有空位了才能去洗碗。

支持随时查看每个洗碗工的统计数据,包括洗了多少个碗,在池子里花费的平均时间,以及在池子外等待的平均时间。

希望高手给出编程解答或者相关的编程例子,或者流程图。要求用c语言实现,如果是linux多线程解决就最好了!

解决方案

你这个就是经典生产者与消费者模型
http://blog.chinaunix.net/uid-15751163-id-2762279.html

解决方案二:

http://yunpan.cn/cQDZMjfZntX5Z 访问密码 28eb
这个是跨平台的,是c++的自己拿去改改吧

解决方案三:

首先,我觉得此问题的解决需要多线程的原因无非是需要支持随时查看每个洗碗工的统计数据,即一种异步问题
此问题开两个线程即可,一个任务线程,负责管理洗碗的过程控制,一个监察线程,供查看统计数据
在任务线程中,需要考虑一个问题,即洗碗工开始洗碗时就确定其洗碗时间,抑或每个洗碗工都有其固定的洗碗时间,还是洗碗过程中的允许的每一秒都判断一下是否洗碗结束。此线程每隔一秒运行一次,负责管理洗碗的的进度
监察线程被IO阻塞,能够异步地(随时)查看数据
此外需要加互斥锁,保证修改时不能访问这些数据

呃,一个题外话,貌似第一句有文字错误”洗澡“

解决方案四:

不多说了!生产者和消费者问题。

google下网络很多成熟的思路了。

解决方案五:

典型的生产者和消费者问题。参考下面的例子:
http://blog.csdn.net/q345852047/article/details/6741226

时间: 2024-08-03 01:48:44

多线程 操作系统-关于操作系统多线程编程的相关文章

c++在windows操作系统下的多线程编程?

问题描述 c++在windows操作系统下的多线程编程? 想在windows操作系统上的VS2010将代码实现多线程并行执行,可是之前没接触过,不知道怎么操作编代码,求大神指导!!! 解决方案 Windows多线程编程多线程编程windowsWindows 下多线程编程 解决方案二: http://www.cnblogs.com/china-victory/archive/2012/11/09/2763187.html 解决方案三: 把任务分割号,细分好,各个线程任务分好 其他都不复杂,虽然会有

Java多线程原理及ThreadLocal多线程实例详解

一.线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是程序的一个动态执行过程,是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 Windows系统中,一个运行的exe就是一个进程.线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存."同时"执行是人的感觉,在线程之间实际上轮换执行. 二.Java

什么是操作系统?操作系统知识介绍

系统软件的核心是操作系统.操作系统是由指挥与管理计算机系统运行的程序模板和数据结构组成的一种大型软件系统,其功能是管理计算机的硬件资源和软件资源,为用户提供高效.周到的服务.操作系统与硬件关系密切,是加在"裸机"上的第一层软件,其他绝大多数软件都是在操作系统的控制下运行的,人们也是在操作系统的支持下使用计算机的.操作系统是硬件与软件的接口. 常用的操作系统有UNIX/Xenix.MS-DOS.Windows XP.Linux和OS/2.下面简单介绍这些操作系统的发展过程和功能特点. (

udp多线程-linux下udp 多线程错误

问题描述 linux下udp 多线程错误 udp 的多线程调用怎么报sendto参数无效错误啊!!! Invalid argument 解决方案 是不是调用sendto的socket对象不能跨线程使用 解决方案二: 把你的sendto附近的代码贴出来?

多线程在Visual C#网络编程中的应用

visual|编程|多线程|网络 网络应用程序的一般都会或多或少的使用到线程,甚至可以说,一个功能稍微强大的网络应用程序总会在其中开出或多或少的线程,如果应用程序中开出的线程数目大于二个,那么就可以把这个程序称之为多线程应用程序.那么为什么在网络应用程序总会和线程交缠在一起呢?这是因为网络应用程序在执行的时候,会遇到很多意想不到的问题,其中最常见的是网络阻塞和网络等待等. 程序在处理这些问题的时候往往需要花费很多的时间,如果不使用线程则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错

多线程技术在Delphi数据库编程中的应用

引言 在传统上,并发多任务的实现采用的是在操作系统级运行多个进程,由操作系统按照一定的策略(优先级.循环等),调度各个进程的执行,以最大限度的利用计算机的各种资源.在这种实现方法中最基本的调度单位是操作系统级上的进程.由于各个进程拥有自己独立的运行环境(寄存器和地址空间等).进程与进程之间的耦合关系差,并发性粒度过于粗糙,并发实现也不太容易.所以,除非特殊需要,一般的应用设计都不采用这种技术. 为了克服这些问题,近年来逐步发展了并发多线程的程序设计技术.从并发Ada.并发C等各种并发多任务的程序

Linux操作系统下C语言编程入门

这里向大家介绍一下在Linux/UNIX 的机器上,进行 C/C++ 编程的一些入门级知识. · 所需具备的背景知识 · 开发所需的基本环境 · 获得帮助的途径 · 通过一个实例了解基本步骤 Prerequisite 先决条件: 在Linux上编写 C 程序,至少要熟悉以下两方面的基础知识: 1. C语言的编程基础,至少要知道一些基本的语法,控制流程等编程常识. 对常用的标准 C 函数库有常识性的了解. 2. 对Linux/UNIX 的操作有常识性的了解,掌握常用的shell 命令,如 ls,

基于Linux操作系统上的C编程与内核导读

动态内存的使用 上一节的方法虽然可以避免溢出的问题,但会导致数据的丢失,下面我们就来学习一种更好的方法-动态内存的使用.由于动态内存是完全由用户自行分配使用的,因此需要用到一些系统调用,下面我们就分别学习它们. 首先我们需要的是动态内存分配的系统调用calloc()函数,其函数原型为: #include void *malloc(size_t size); void *calloc(size_t nmemb,size_t size); 函数malloc和calloc都用于分配动态内存空间,其中m

java 多线程-为什么使用Java多线程下载文件时下载后的文件和服务器端文件大小一模一样但是无法打开

问题描述 为什么使用Java多线程下载文件时下载后的文件和服务器端文件大小一模一样但是无法打开 为什么使用Java多线程下载文件时下载后的文件和服务器端文件大小一模一样但是无法打开?? package com.miuitust.mutilethread; import java.io.File; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impor