喜 隊列我想建立一個簡單的程序,它確實如何處理線程C#
Parallel.ForEach(m_CustomerArr, customer =>
{
customer.OrderSomthing();
});
當客戶訂購的東西,他查詢數據庫,當他的物品用完了,他聯繫到供應商
public bool takeOrder(Order o)
{
lock (s_QueueLocker)
{
OrderQueue.Enqueue(o);
}
//waits here to be signaled by the working thread of supplier
o.m_ManualResetEvent.WaitOne();**
return true;
}
只有一個供應商誰holdes隊列誰擁有supplierthread:
public void CreateThead()
{
Order currentOrder;
while (true)
{
if (OrderQueue.Count != 0)
{
currentOrder = OrderQueue.Dequeue();
DoOrder(currentOrder);
}
}
}
private void DoOrder(Order currentOrder)
{
//update the db this function runes only in one thread
currentOrder.m_ManualResetEvent.Set();
System.Threading.Thread.Sleep(5000);
}
哪裏m_ManualResetEvent是誰傳遞給每一個訂單在c'tor客戶中的一員
public class Order
{
public ManualResetEvent m_ManualResetEvent;
public string m_Query;
public int m_Quntity;
public Order(ManualResetEvent customerManualResetEvent, string query, int quntity)
{
m_ManualResetEvent = customerManualResetEvent;
m_Query = query;
m_Quntity = quntity;
}
}
這將是一個上停止等待線程(在**)和信號他像在C互斥的最佳途徑? 我是新來的c#多線程,我的概念是從Linux內核,所以事情可能會更容易在C#中的類已建成誰實現它...
所以我的問題是'有更好的設計,更好的實踐,更好的方式來做到以上?
你爲什麼要在一個線程中更新數據庫? – 2010-11-12 19:44:09
@Pieter好問題:)讓我們假設我從Threadpool創建線程來處理它......好的建議隊友:),正如我所提到的,我在數據庫和c#字段中的體驗 – 2010-11-12 19:48:29
線程池中的線程?我想知道:如果你在一個不同的線程上寫數據庫,然後等待它,你爲什麼不直接在線程本身寫數據庫呢? – 2010-11-12 19:51:12