/*
* 由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,表示核心已經...