作者归档:在线疯狂

RSS feed of 在线疯狂

C++编程模拟生产者消费者模型

生产者消费者问题是操作系统中典型的进程同步互斥问题,(英语:Producer-Consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。

该问题描述了两个共享固定大小缓冲区的线程“生产者”(Producer)和“消费者”(Consumer)在实际运行时会发生的问题。

生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。

问题的约束条件是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中为空时消耗数据。

下面的C++程序代码用水果的例子模拟生产者消费者模型,生产者随机生产水果列表{"Apple","Banana","Cherry","Orange","Pear","Peach","WaterMelon"}中的一种,缓冲区用数组模拟。

程序应用了互斥锁和信号量,使用了CreateMutex,ReleaseMutex,CreateSemaphore,ReleaseSemaphore,WaitForSingleObject等Windows下的线程函数。

C++代码如下 ...

继续阅读

字典树(Trie树)的C语言实现

字典树也称Trie树,是一种哈希树,适用于字符串的查找,存储,统计,排序等操作。

Trie树的C语言实现代码如下:


#define MAX 26    //26个字母
#define SLEN 100   //节点中存储的字符串长度
//Trie结构体定义
struct Trie
{
    struct Trie *next[MAX];
    char s[SLEN];      //节点处存储的字符串
    int isword;         //节点处是否为单词
    char val;           //节点的代表字符
} *root;
//初始化Trie树
struct Trie *init()
{
    struct Trie *root ...

继续阅读

Java获取屏幕截图示例

Java实现屏幕截图获取需要使用java.awt包下的工具类

一个最简单的获取屏幕截图的代码实现如下所示:


import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;

public class ScreenshotGetter {
	public BufferedImage getScreenshot() throws AWTException {
		final Robot robot = new ...

继续阅读

Python LEGB作用域规则简述

What exactly are the Python scoping rules?

Python的作用域规则到底指的是什么?

If I have some code:

如果我有一段代码:


code1
class Foo:
   code2
   def spam.....
      code3
      for code4..:
       code5
       x()

Where is x found? Some possible choices include the list above:

x在哪里能找到?可能的选择列举如下:

  1. In the ...

继续阅读

Python程序员常犯的10个错误

原文链接:http://www.toptal.com/python/top-10-mistakes-that-python-programmers-make

BY MARTIN CHIKILIAN - SENIOR SOFTWARE ENGINEER @ TOPTAL

About Python 关于Python

Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing ...

继续阅读