我是CSharp和Threading的新手.
为了熟悉Monitor.Wait,Monitor.lock和Monitor.PulseAll,我构建了一个下面描述的场景.
"不同的球队正在为实践目的分享一个FootballGround.任何时候只有一个团队可以使用他们的练习场.一个团队可以使用地面练习30分钟.一旦时间达到25分钟,它应该发出信号5分钟后地面即将释放的线程.当地面潮湿时(enum有三个值自由,分配,潮湿)没有任何队员可以锁定地面,所有人都应该等待10分钟"
老实说,我不知道如何将描述转化为实际编码.根据我的理解,我设计了大纲.
namespace ThreadingSimulation
{
// A Random Activity can be picked up from this enum by a team
public enum RandomGroundStatus
{
free,
allotted,
Wet
}
class FootBallGround
{
public void Playing(object obj)
{
// Here the name of the team which is using the ground will be printed
// Once the time is reached to 25 minnutes the active thread acquired
// the lock will signal other threads
}
public void GroundCleaningInProgress(object obj)
{
// Ground …Run Code Online (Sandbox Code Playgroud) Thraed.Abort()和Thread.Interrupt()之间有什么区别?如何以线程安全方式调用它们.如果提供简单的示例,它将会有所帮助.
我是C#的新手.我了解到通常所有线程都是前景,除非你使用IsBackGround = true 明确地将它指定为"后台"线程.
一些疑惑突然出现在我的脑海里.
1)将线程保留为后台线程有什么好处?
2)执行以下代码时:
static void Main(string[] args)
{
Thread worker = new Thread(SayHello);
worker.IsBackground = true;
worker.Start();
Console.WriteLine("Hello From Main");
}
static void SayHello()
{
Console.WriteLine("Hello World");
Console.ReadKey(true);
}
Run Code Online (Sandbox Code Playgroud)
我需要使用worker.Join()来保持主线程等待程序立即终止.除了Join()我可以使用其他技术来保持主线程等待吗?
当我在处理多线程时,如何调试以了解哪个线程导致异常行为?
我可以使用permonitor进行调试,还是有其他可用的工具或调试工具?
我不能拥有匿名委托声明,类似于以下内容:
ThreadStart starter = delegate() { go(); };
...
static void go()
{
Console.WriteLine("Nice Work");
}
// (or)
ThreadStart starter=delegate() { Console.WriteLine("Hello");}
Run Code Online (Sandbox Code Playgroud) 我是处理线程的新手.
System.Diagnostics和System.Timers在线程上下文中的作用是什么?两者是相互替代的还是他们为执行一些独特的任务而实施的?
我只是一个初学者."ParameterizedThreadStart"接受单个对象作为参数.
有没有其他代表签名允许我
(1)在线程上传递params(变量参数)?
(2)支持列表等通用参数?