该程序解析文本文件。它有两个线程。其中一个读取文件,另一个解析文件。这个多线程程序可以在单核处理器上正常工作吗?我在另一个线程创建之前添加了等待线程结束,以便在单核处理器上得到正确的工作。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;
namespace lab2Form
{
public partial class Form1 : Form
{
private CLogParser m_parser;
private Thread m_parserThread, m_fileReaderThread;
public Form1(string logName)
{
InitializeComponent();
m_parser = new CLogParser();
timer1.Interval = 50;
m_fileReaderThread = new Thread(m_parser.ThreadReadList);
m_fileReaderThread.Start(logName);
m_fileReaderThread.Join(); THE ADDED STRING
m_parserThread = new Thread(m_parser.ThreadProc);
m_parserThread.Start();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (m_parserThread.ThreadState != ThreadState.Stopped)
{
m_parser.ShowData(ref dmRequestsGridView, ref URLGridView, ref dmDataGridView, ref errorCodesGridView);
}
else
{
timer1.Stop();
MessageBox.Show("Parsing Complete!");
}
}
}
}
答案 0 :(得分:4)
是。通常,您可以愉快地运行具有比物理处理器更多线程的进程 - 如果有的话,如果您有多个物理处理器核心,则会遇到更多线程问题(因为突然可能会发生两个(或更多)事情)时钟周期。
答案 1 :(得分:0)
多任务操作系统比多核架构更长。操作系统只是在线程之间执行上下文切换。单个线程不会被饿死(好吧,如果你做错了什么就可以,但在简单的情况下,它们都会得到一个时间片)。
您无需致电fileReaderThread.Join()