[英]Is this thread safe?
這個線程安全嗎?
private static bool close_thread_running = false;
public static void StartBrowserCleaning()
{
lock (close_thread_running)
{
if (close_thread_running)
return;
close_thread_running = true;
}
Thread thread = new Thread(new ThreadStart(delegate()
{
while (true)
{
lock (close_thread_running)
{
if (!close_thread_running)
break;
}
CleanBrowsers();
Thread.Sleep(5000);
}
}));
thread.Start();
}
public static void StopBrowserCleaning()
{
lock (close_thread_running)
{
close_thread_running = false;
}
}
好吧,它甚至都不會編譯,因為你試圖鎖定一個值類型。
引入一個引用類型的單獨鎖定變量,例如
private static readonly object padlock = new object();
除此之外:
如果StopBrowserCleaning()
被調用時有一個清潔的線程(雖然它睡覺),但隨后StartBrowserCleaning()
的是,它的意思是關閉第一個線程通知前再次呼吁,你會用兩個線程結束。
您可能需要考慮使用兩個變量 - 一個用於“是否意味着要清理線程”,另一個用於“實際上是否有清理線程”。
此外,如果您使用帶有Wait/Pulse
的監視器或EventHandle
(例如ManualResetEvent
),您可以使您的睡眠時間更加活躍,並且可以更快地處理停止請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.