سؤال

وهذا هو موضوع آمنة؟

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 مع الإسناد
لا تنتمي إلى StackOverflow
scroll top