簡體   English   中英

這個線程安全嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM