在分配给当前线程的任务完成之前,资源一次仅可供一个线程使用,而不会中断任何其他线程,这种技术在 C# 中称为同步。实际上,在多线程程序中,线程可以在所需的时间内访问任何资源,并且资源由线程异步共享和执行,这是一项关键任务,可能会导致系统停止,因此线程必须同步执行通过线程的同步,我们可以保持线程的一致性,保证一个线程执行过程中不会有其他线程干扰。
下面是C#线程同步的语法如下:
Thread thread_name = new Thread(method_name); thread_name.Start(); thread_name.Join();
或
Thread thread_name = new Thread(method_name); thread_name.Start(); method_name() { lock(this) { //thread_name thread is executed } }
其中 thread_name 是线程的名称,method_name 是从调用 thread_name.Start() 时开始由该线程单独访问的方法的名称,thread_name.Join() 等待直到该线程完成停止所有其他线程的执行。
方法中的Lock关键字,method_name锁定线程执行,以便在当前线程完成之前没有其他线程可以访问该方法。
下面是C#线程同步的例子:
使用 join 关键字演示线程同步的 C# 程序。
代码:
using System; using System.Threading; //a namespace called program is created namespace program { //a class called check is defined class check { //main method is called static void Main(string[] args) { //an instance of the thread class is created which operates on a method Thread firstthread = new Thread(secondfunction); //start method is used to begin the execution of the thread firstthread.Start(); //join method stops all other threads while the current thread is executing firstthread.Join(); Thread secondthread = new Thread(firstfunction); secondthread.Start(); secondthread.Join(); } private static void firstfunction(object obj) { for(inti=1;i<3;i++) { Console.WriteLine("First function is executed two times in a row because join method is called on the second thread operating on this method."); } } private static void secondfunction(object obj) { for(inti=1;i<3;i++) { Console.WriteLine("Second function is executed two times in a row because join method is called on the first thread operating on this method."); } } } }
输出:
说明:在上面的程序中,创建了一个名为program的命名空间。然后定义一个名为 check 的类,在该类中调用 main 方法。然后创建一个线程实例来操作一个方法,该方法使用 Start() 方法开始,并在同一线程上使用 join() 方法,以确保其执行不会被其他线程中断。因此,输出同步显示在一行中。程序的输出如上面的快照所示。
使用 lock 关键字演示线程同步的 C# 程序。
代码:
using System; using System.Threading; //a class called create is created class create { public void func() { //lock is called on this method lock (this) { for (inti = 1; i<= 2; i++) { Console.WriteLine("The thread is executing"); } } } } class check { public static void Main(string[] args) { //an instance of the create class is created create c = new create(); //an instance of the thread class is created which operates on the method in another class Thread firstthread = new Thread(c.func); firstthread.Start(); Thread secondthread = new Thread(c.func); secondthread.Start(); } }
输出:
说明: 在上面的程序中,创建了一个名为 create 的类,在该类中定义了方法,我们使用了 lock 关键字,这意味着操作该方法的线程会为其自身锁定该方法,直到它完成执行而不允许其他线程访问该方法。这样线程就可以同步执行。程序的输出如上面的快照所示。
在本教程中,我们通过编程示例及其输出了解线程同步的定义、语法和工作原理,了解 C# 中 ThreadSynchronization 的概念。
这是 C# 线程同步指南。在这里,我们讨论 C# 线程同步简介及其工作原理以及示例和代码实现。您还可以浏览我们其他推荐的文章以了解更多信息 –
以上是C# 线程同步的详细内容。更多信息请关注PHP中文网其他相关文章!