Multithreading 线程锁如何处理后续函数调用序列
线程锁如何准确地处理在锁定块仍处于活动状态时到达的消息/函数调用序列 我读过关于高级编程模型(例如C#.Net、Java)和低级编程模型(例如C、Assembly)的书,因此我通常认为字节是我所有问题的基础,因此每当我试图找到问题的答案时,它都会让我非常头痛 在多线程中,我的一个基本困惑是,锁定如何影响稍后在块被锁定或已被特定进程使用之后到达的消息或函数调用 操作系统是否按顺序处理这些消息?操作系统是否提供了一个内部队列或存储器来按顺序存储与消息到达顺序相对应的消息 我希望你能在这一点上启发我 为了简单起见,下面是C#.Net控制台应用程序中的示例程序:Multithreading 线程锁如何处理后续函数调用序列,multithreading,synchronization,locking,mutex,Multithreading,Synchronization,Locking,Mutex,线程锁如何准确地处理在锁定块仍处于活动状态时到达的消息/函数调用序列 我读过关于高级编程模型(例如C#.Net、Java)和低级编程模型(例如C、Assembly)的书,因此我通常认为字节是我所有问题的基础,因此每当我试图找到问题的答案时,它都会让我非常头痛 在多线程中,我的一个基本困惑是,锁定如何影响稍后在块被锁定或已被特定进程使用之后到达的消息或函数调用 操作系统是否按顺序处理这些消息?操作系统是否提供了一个内部队列或存储器来按顺序存储与消息到达顺序相对应的消息 我希望你能在这一点上启发我
using System;
using System.Threading;
using System.IO;
namespace MultiThread
{
class Program
{
static object padlock = new object();
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
string s = "hello " + i.ToString();
ThreadPool.QueueUserWorkItem(SayHello, s);
}
Console.ReadKey();
}
static void SayHello(object message)
{
Console.WriteLine(message.ToString() + " start");
lock (padlock)
{
Console.WriteLine(message.ToString() + " running");
try
{
for (int i = 0; i < 1000; i++)
{
string[] f = File.ReadAllLines("bigfile.txt");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine(message.ToString() + " finish");
}
Console.WriteLine(message.ToString() + " end");
}
}
}
使用系统;
使用系统线程;
使用System.IO;
名称空间多线程
{
班级计划
{
静态对象挂锁=新对象();
静态void Main(字符串[]参数)
{
对于(int i=0;i<10;i++)
{
字符串s=“hello”+i.ToString();
QueueUserWorkItem(SayHello,s);
}
Console.ReadKey();
}
静态void SayHello(对象消息)
{
Console.WriteLine(message.ToString()+“start”);
锁(挂锁)
{
Console.WriteLine(message.ToString()+“running”);
尝试
{
对于(int i=0;i<1000;i++)
{
字符串[]f=File.ReadAllLines(“bigfile.txt”);
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
Console.WriteLine(message.ToString()+“finish”);
}
Console.WriteLine(message.ToString()+“end”);
}
}
}
结果是:
问题:
亮点:“Hello i start”显示消息/函数调用的到达。“Hello i running”显示了单个时间运行的线程的顺序 不清楚你在问什么。一个特定的例子,例如一些说明您的问题的伪代码,可能会有所帮助。嗨@AlexeyKukanov,我已经编辑了这个问题以显示伪代码和结果。