线程同步的方式和机制
临界区、互斥区、事件、信号量四种方式
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
---------------------------------
1.如果一个后花园只种蔬菜类,那么就用简单工厂就可以了.
2.如果后花园蔬菜品种繁多.得用工厂方法才可以,把共有的东西抽象出来.
3.如果要扩大后花园的规模,比如一个在北方,一个在南方,这样工厂方法就无法实现了,就应当用抽象工厂,把各种各样的植物,又组成一个后花园.
所以我个人认为,简单工厂是一个工厂只生产一类的产品,面对的是具体的类,工厂方法是可以生产不同的产品,把公共的方法抽象出来,然后进行创建各种各样的产品.抽象工厂把几种产品划出共同的东西,把相互依赖的对象抽象出来,只要实现这些接口就可以得到不同的产品.
posted @ 2011-04-26 14:29 hbfly 阅读(12) 评论(2)
编辑
1)写一个比较复杂的文本处理工具,不要妄图代码可以处理所有情况,一定要一种ruler.txt的机制,里面有对应的 a强制替换成 b, 甚至还要有加载特定的ruler.txt的机制
2)
posted @ 2010-10-25 15:06 hbfly 阅读(31) 评论(0)
编辑
最近的工作用到创建wave文件,把方法share出来
现在只是能work但还有很大的缺陷
1) 正确的写入方法是开辟一块buffer,然后一个线程写入,一个读。或者用stream
但没弄出来开,着急赶工就采用了逐秒写入这种笨方法,
考虑过用内存映射文件,也卡住了,等明天贴上

C# create wave

/**//// <summary>
/// write data per second
/// y= a*sin(Wt + b) ; W = f*2*PI
/// </summary>
public void CreateWave(
WaveFormat Format,
Int32 LengthInSecs,
Int32 Amplitude,
Int32 AmplitudeIncremental,
Int32 Frequency,
Int32 FrequencyIncremental,
string FileName)

{
//WaveFormat Format = new WaveFormat(44100, 16, 2);
if(File.Exists(FileName))

{
File.Delete(FileName);
}

MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
Int32 dataLength = (Int32)(Format.SamplesPerSec * LengthInSecs * Format.BitsPerSample / 8);

writer.Write(System.Text.Encoding.ASCII.GetBytes("RIFF".ToCharArray()));

writer.Write((Int32)(dataLength + 36)); //File length minus first 8 bytes of RIFF description

writer.Write(System.Text.Encoding.ASCII.GetBytes("WAVEfmt ".ToCharArray()));

writer.Write((Int32)16); //length of following chunk: 16

writer.Write(Format.FormatTag);
writer.Write(Format.Channels);
writer.Write(Format.SamplesPerSec);
writer.Write(Format.AvgBytesPerSec);
writer.Write(Format.BlockAlign);
writer.Write(Format.BitsPerSample);

writer.Write(System.Text.Encoding.ASCII.GetBytes("data".ToCharArray()));

writer.Write(dataLength);

FileStream fs = new FileStream(FileName, FileMode.Append);
stream.WriteTo(fs);
stream.Close();
writer.Close();
fs.Close();

double t = (2 * Math.PI) / Format.SamplesPerSec;//interval for 1 Hz
double X = 0;
short Y;
double ActualxStep;
float ActualAmplitude;

for (int i = 0; i < LengthInSecs; i++)

{
MemoryStream ms2 = new MemoryStream();
BinaryWriter bw2 = new BinaryWriter(ms2);

//interval for the requested frequency = 1Hz * frequencyHz
ActualxStep = t * (Frequency + FrequencyIncremental * i);
ActualAmplitude = Amplitude + (AmplitudeIncremental * i);

for (int j = Format.SamplesPerSec * Format.Channels * i; j < Format.SamplesPerSec * Format.Channels * (1 + i); j += Format.Channels)

{
X += ActualxStep;
Y = (short)(Math.Sin(X) * ActualAmplitude);

for (int channelIndex = 0; channelIndex < Format.Channels; channelIndex++)

{
//ChannelSample = Samples[j + channelIndex];
//ChannelSample = (short)((ChannelSample + Y) / 2);
//Samples[j + channelIndex] = ChannelSample;
bw2.Write(Y / 2);
}
}
FileStream fs2 = new FileStream(FileName, FileMode.Append);
ms2.WriteTo(fs2);
ms2.Close();
fs2.Close();
}
}
posted @ 2009-04-28 23:00 hbfly 阅读(612) 评论(1)
编辑
中国人说:第一组是老鼠和牛.老鼠代表智慧,牛代表勤奋.智慧和勤奋一定要紧紧结合在一起.如果光有智慧,不勤奋,那就变成小聪明;而光是勤奋,不动脑筋,那就变成愚蠢.这两者一定要结合.这是祖先对我们第一组的期望和要求,也是最重要的一组. 第二组是老虎和兔子.老虎代表勇猛,兔子代表谨慎.勇猛和谨慎一定要紧紧结合在一起才能作到胆大心细.如果勇猛离开了谨慎,就变成了鲁莽,而没了勇猛,就变成了胆怯.这一组也非常重要,所以,防在第二位置上.中国人看者这些贵族,补上一句:当我们表现出谨慎的时候,千万不要以为中国人没有勇敢的一面. 看着大家陷入沉思,中国人继续说:第三组是龙和蛇,龙代表猛,蛇代表柔韧.所谓刚者易折,太刚了容易折断,但是,如果只有柔的一面就易失去主见,所以,刚柔并济是我们的祖训. 接下来是马和羊,马代表勇往直前,羊代表和顺.如果一个人只顾自己直奔目标,不顾及周围环境,必然会和周围不断磕碰,最后不见得能达到目标.但是,一个人光顾及和顺,他可能连方向都没有了.所以,勇往直前的秉性,一定要和和顺紧紧结合在一起,这是祖先对我们的第四组期望. 再接下来是猴子和鸡.猴子代表灵活,鸡定时打鸣,代表恒定.灵活和恒定一定要紧紧结合在一起.如果你光灵活,没有恒定,再好的政策也得不到收获.一方面具有稳定性,保持整体和谐和秩序,另一方面有能在变通中前进,这才是最根本的要旨. 最后是狗和猪.狗代表忠诚,猪代表随和.如果一个人太忠诚,不懂得随和,就会排斥他人.反过来,一个人太随和,没有忠诚,这个人就失去原则.无论是对一个民族的忠诚,还是对自己理想的忠诚,一定要与随和紧紧结合在一起,这样才容易保持内心深处的平衡.
posted @ 2009-02-03 15:34 hbfly 阅读(179) 评论(0)
编辑
摘要: 原题:用递归求第10个数,它等于前2数之和,如{1,1,2,3,5}[代码]
阅读全文
posted @ 2008-10-14 11:09 hbfly 阅读(131) 评论(0)
编辑
posted @ 2008-09-11 17:33 hbfly 阅读(234) 评论(4)
编辑
posted @ 2008-08-29 11:38 hbfly 阅读(925) 评论(0)
编辑
摘要: 最近大家的工资到手,人人都吃了一惊,怎么发到手里的钱比以前还少了呢?前段时间公司大张旗鼓的给每个人涨了工资,个人所得税得起征点也提高了,怎么钱越来越少了呢?要弄明白这里面的道道,得仔细研究我们的工资条。 事实上,国/家真正从个人收走的钱,个人所得税制是一个小头,真正的大头是各类以保障民生为名义的社保。而这些社保里面,个人缴纳的又是小部分,真正的大头在于单位缴纳的那部分。以下是上海市的规定的社...
阅读全文
posted @ 2008-08-07 17:27 hbfly 阅读(150) 评论(2)
编辑
摘要: 反射的性能: 使用反射来调用类型或者触发方法,或者访问一个字段或者属性时clr 需 要做更多的工作:校验参数,检查权限等等,所以速度是非常慢的。所以尽量不要使用反射进行编程,对于打算编写一个动态构造类型(晚绑定)的应用程序,可以采取以下的几种方式进行代替: 1. 通过类的继承关系。让该类型从一个编译时可知的基础类型派生出来,在运行时生成该类 型的一个实例,将对其的引用放到其基础类型的一个变量中,然...
阅读全文
posted @ 2008-08-07 15:56 hbfly 阅读(480) 评论(3)
编辑