多程序IO同步

2021-08-18 17:37:11 字數 4320 閱讀 1892

/*

* 由sharpdevelop建立。

* 使用者: administrator

* 日期: 2018-03-31

** 要改變這種模板 工具|選項|**編寫|編輯標準標頭檔案

*/usingsystem;

usingsystem.runtime.serialization.json;

usingsystem.io;

usingsystem.text;

usingnewtonsoft;

usingnewtonsoft.json;

usingnewtonsoft.json.serialization;

usingnewtonsoft.json.converters;

usingnewtonsoft.json.bson;

usingnewtonsoft.json.utilities;

usingnewtonsoft.json.linq;

usingsystem.threading.tasks;

usingsystem.threading;

namespacewaithandleexample

);#endregion

#region 測試**

var filepath =

path.

combine(

"test.log").

toupper();

var mutexkey =

mutexexample.

getfilepathmutexkey(filepath);

//同時開啟n個寫入執行緒

parallel.

for(

0, logcount, e =>

);});

console.

writeline(

string.

format(

"log count:.\t\twrited count:.\tfailed count:.",

logcount.

tostring(),

writedcount.

tostring(),

failedcount.

tostring()));

console.

read();

#endregion

}///

/// c#互斥量使用示例**

///summary>

///已在經過測試並上線執行,可直接使用remarks>

public

static

class

mutexexample

finally}}

////// 獲取檔名對應的程序同步鍵

///summary>

///name

="filepath">檔案路徑(請注意大小寫及空格)param>

///程序同步鍵(互斥體名稱)returns>

public

static

string

getfilepathmutexkey(

string filepath)

", filepath)));

//轉換為作業系統級的同步鍵

var mutexkey =

string.

format(

@"global\", filekey);

return mutexkey;

}///

/// 程序間同步執行

///summary>

///name

="mutexkey">作業系統級的同步鍵

/// (如果將 name 指定為 null 或空字串,則建立乙個區域性互斥體。

/// 如果名稱以字首「global\」開頭,則 mutex 在所有終端伺服器會話中均為可見。

/// 如果名稱以字首「local\」開頭,則 mutex 僅在建立它的終端伺服器會話中可見。

/// 如果建立已命名 mutex 時不指定字首,則它將採用字首「local\」。)param>

///name

="action">同步處理操作param>

public

static

void

mutexexec(

string mutexkey, action action)

////// 程序間同步執行

///summary>

///name

="mutexkey">作業系統級的同步鍵

/// (如果將 name 指定為 null 或空字串,則建立乙個區域性互斥體。

/// 如果名稱以字首「global\」開頭,則 mutex 在所有終端伺服器會話中均為可見。

/// 如果名稱以字首「local\」開頭,則 mutex 僅在建立它的終端伺服器會話中可見。

/// 如果建立已命名 mutex 時不指定字首,則它將採用字首「local\」。)param>

///name

="action">同步處理操作param>

///name

="recursive">指示當前呼叫是否為遞迴處理,遞迴處理時檢測到異常則丟擲異常,避免進入無限遞迴param>

private

static

void

mutexexec(

string mutexkey, action action,

boolrecursive)

//當其他程序已上鎖且沒有正常釋放互斥鎖時(譬如程序忽然關閉或退出),則會丟擲abandonedmutexexception異常

catch(

abandonedmutexexception ex)

finally}}

}#region 測試寫檔案的**

static

int

logcount =

50000;

static

int

writedcount =

0;static

int

failedcount =

0;static

void

writelog(

string logfilepath)

.\r\n",

thread.currentthread.managedthreadid.

tostring().

padright(

4), now.

tolongdatestring(), now.

tolongtimestring(), now.millisecond.

tostring());

file.

(logfilepath, logcontent);

writedcount++;

}catch(

exception ex)

}#endregion}}

多程序共享 同步

usr bin python coding utf 8 from multiprocessing import process,array,value deff n,a n.value 3.1415926 for i in range 5 a i a i if name main num value...

使用mutex同步多程序

下面程式的功能是,建立一片共享記憶體,讓父程序和子程序都往裡面寫資料,但是要求,父程序或者子程序寫完後,另乙個程序才能開始寫,所有就需要同步。所謂的共享記憶體 這片記憶體是在核心空間的,所以子程序不複製這片記憶體 如果不是共享記憶體,是父程序裡的記憶體,那麼子程序則複製它。include inclu...

多執行緒 多程序 非同步IO

sk.bind address 將套接字繫結到位址。address位址的格式取決於位址族。在af inet下,以元組 host,port 的形式表示位址。sk.listen backlog 開始監聽傳入連線。backlog指定在拒絕連線之前,可以掛起的最大連線數量。backlog等於5,表示核心已經...