Ejemplo n.º 1
0
 // 异步更新通用结果
 private void AppendCommonSemResult(string data)
 {
     Txb_Sem_Result.Dispatcher.BeginInvoke(new Action(() =>
     {
         Txb_Sem_Result.AppendText(data + "\n");
         Txb_Sem_Result.ScrollToEnd();
         Lbl_Produced_Cnt.Content = "" + producedCnt;
     }));
 }
Ejemplo n.º 2
0
 // 异步更新消费者结果
 private void AppendConSemResult(string data)
 {
     Txb_Sem_Result.Dispatcher.BeginInvoke(new Action(() =>
     {
         lblBuffers[outIdx % BUFF_SIZE].Background = emptyBg;
         lblBuffers[outIdx % BUFF_SIZE].Content    = INIT_CONTENT;
         outIdx++;
         Txb_Sem_Result.AppendText(data + "\n");
         Txb_Sem_Result.ScrollToEnd();
         Lbl_Produced_Cnt.Content = "" + producedCnt;
     }));
 }
Ejemplo n.º 3
0
 // 异步更新生产者结果
 private void AppendProSemResult(string data)
 {
     Txb_Sem_Result.Dispatcher.BeginInvoke(new Action(() =>
     {
         producedCnt++;
         lblBuffers[inIdx % BUFF_SIZE].Background = fullBg;
         lblBuffers[inIdx % BUFF_SIZE].Content    = FULL_CONTENT;
         inIdx++;
         Txb_Sem_Result.AppendText(data + "\n");
         Txb_Sem_Result.ScrollToEnd();
         Lbl_Produced_Cnt.Content = "" + producedCnt;
     }));
 }
Ejemplo n.º 4
0
        // 开始模拟生产者消费者同步
        private void Btn_Start_Sem_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                CreateBufferGrid();
            }catch (Exception)
            {
                MessageBox.Show("缓冲区个数应小于12且为正整数!");
                return;
            }
            int producerCnt, consumerCnt;

            try
            {
                Txb_Sem_Result.AppendText(string.Format("缓冲区大小为{0}, 生产目标个数为{1}\n", BUFF_SIZE, TOTAL_PRODUCT));
                producerCnt = int.Parse(Txb_Producer_Cnt.Text);
                consumerCnt = int.Parse(Txb_Consumer_Cnt.Text);
                empty       = new Semaphore(BUFF_SIZE, BUFF_SIZE);
                full        = new Semaphore(0, BUFF_SIZE);

                for (int i = 0; i < producerCnt; i++)
                {
                    Thread thread = new Thread(new ParameterizedThreadStart(Produce))
                    {
                        Name = "生产者" + i
                    };
                    thread.Start(thread.Name);
                }
                for (int i = 0; i < consumerCnt; i++)
                {
                    Thread thread = new Thread(new ParameterizedThreadStart(Consume))
                    {
                        Name = "消费者" + i
                    };
                    thread.Start(thread.Name);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("请输入正整数!");
            }
        }