多线程以及如何确保一切都完美同步

时间:2015-07-27 15:20:40

标签: c# multithreading queue

首先是我的所有示例代码:

class Program
{
    static List<string> queue = new List<string>();
    static System.Threading.Thread queueWorkerThread;

    static void Main(string[] args)
    {
        // Randomly call 'AddItemToQueue' at certain circumstances and user inputs (unpredictable)
    }

    static void AddItemToQueue(string item)
    {
        queue.Add(item);

        // Check if the queue worker thread is active
        if (queueWorkerThread == null || queueWorkerThread.IsAlive == false)
        {
            queueWorkerThread = new System.Threading.Thread(QueueWorker);
            queueWorkerThread.Start();

            Console.WriteLine("Added item to queue and started queue worker!");
        }
        else
        {
            Console.WriteLine("Added item to queue and queue worker is already active!");
        }
    }

    static void QueueWorker()
    {
        do
        {
            string currentItem = queue[0];

            // ...
            // Do things with 'currentItem'
            // ...

            // Remove item from queue and process next one
            queue.RemoveAt(0);

        } while (queue.Count > 0);

        // Reference Point (in my question) <----

    }
}

我想在我的代码中创建的是QueueWorker() - 方法,当队列中有某些内容时,该方法始终处于活动状态。

可以通过AddItemToQueue() - 方法将项目添加到队列中,如代码示例中所示。

它基本上将项目添加到队列中,然后检查队列工作者是否处于活动状态(例如,如果队列中有其他项目之前是否存在)或者是否不存在(例如,如果队列先前完全为空)。 / p>

我不完全确定的是:假设queue-worker-thread当前位于屏幕截图中显示的位置(它刚刚离开while循环),当然还有线程的{{1}此时-property仍然设置为true。

那么如果IsAlive - 方法在同一时间检查了线程的AddItemToQueue() - 属性会怎么样?

这意味着线程会在不久之后结束并且新项目将被留在队列中并且不会发生任何事情,因为IsAlive - 方法没有意识到线程只是

我该如何处理? (我想确保一切正常100%) (如果对我的问题有任何疑问或有些问题不明确,请随时提问!)

0 个答案:

没有答案