|
分類:[C#]
マルチコア(Core 2 Quad)を利用した並列処理ができないか検討しています。
C# 2010 Express のParallel.Invokeで、並列に処理を動かし、
通信にはFTDI社のFtd2xxドライバーを使用しようと思っています。
この場合の排他制御について質問させてください。
単純化していますが、以下のようにプログラミングした場合、
機器1と機器2で同じ関数FT_Write()、FT_Read()を使用することに
なるので、マズイのではないかと考えています。
FT_Write()、FT_Read()内での排他制御も考える必用があるとということで、
以下のように考えるべきなのでしょうか。
クラスを2つ用意し、それぞれのファイルの頭で、
#region 宣言部 内の宣言を行い、
機器1、2で別々のFT_Write()、FT_Read()を使用する。
また並列処理について参考になるHP、書籍等ありましたら
教えていただけるとうれしいです。
よろしくお願いします。
#region 宣言部
using FTD2XX_NET;
//FT_WRITE
[DllImport("FTD2XX.dll")]
unsafe private static extern UInt32 FT_Write(
UInt32 ftHandle,
[MarshalAs(UnmanagedType.LPArray)] byte[] bdata,
UInt32 BufferSize,
UInt32* BytesWriten);
//FT_READ
[DllImport("FTD2XX.dll")]
unsafe private static extern UInt32 FT_Read(
UInt32 lngHandle,
[MarshalAs(UnmanagedType.LPArray)] byte[] bdata,
UInt32 lngBufferSize,
UInt32* lngBytesReturned);
#endregion 宣言部
Parallel.Invoke(
() =>
{
//USB機器1へデータ要求
FT_Write(handle1, 省略 );
//USB機器1からデータ受信
while(Flg1 == false)
{
FT_Read(handle1, 省略 );
//FT_Read()で受信したデータに従いFlg1をTrueにする
}
}
,
() =>
{
//USB機器2へデータ要求
FT_Write(handle2, 省略 );
//USB機器2からデータ受信
while(Flg2 == false)
{
FT_Read(handle2, 省略 );
//FT_Read()で受信したデータに従いFlg2をTrueにする
}
}
);
|