首页 > 其他分享 >线程安全

线程安全

时间:2024-04-22 18:45:21浏览次数:20  
标签:count Thread ++ t2 安全 线程 AddNumber

比如有2个 线程同时访问变量 a 同时给他赋值++操作

//共享变量
int count = 0;

 

Thread t1 = new Thread(AddNumber);
Thread t2 = new Thread(AddNumber);
t1.Start();
t2.Start();
//方法用于阻塞调用线程,直到某个线程终止为止。当你想要等待另一个线程完成其任务后再继续执行时,这个方法非常有用。
t1.Join();
t2.Join();

Console.WriteLine( $"{count}");

 

private void AddNumber(){
  for (int i = 0; i < 100000; i++){
     lock (lockobj) {
         count++;
         }
     }
}

 

那么这个时候 就会出现 count 可能 不是200000 ;

这个时候就需要在 count++ 变量赋值的地方 加锁解决

//锁

object lockobj=new object();

private void AddNumber(){
  for (int i = 0; i < 100000; i++){
     lock (lockobj) {

      count++;

  }  
       
         }
     }
}

这个时候 结果就会是200000,不会存在 上面的结果两个线程同时 对一个变量的访问 导致线程安全


什么是线程安全?
      线程安全
                   多个线程访问共享资源时,对共享资源的访问不会导致数据不一致或不可预期的结果
       同步机制
                  用于协调和控制多个线程之间执行顺序和互斥访问共享资源
                  确保线程按照特定的顺序执行,避免竞态条件和数据不一致的问题
        原子操作
                   在执行过程中不会被中断的操作。不可分割,要么完全执行,要么完全不执行,没有中间状态
                   在多线程环境下,原子操作能够保证数据的一致性和可靠性,避免出现竞态条件和数据竞争的问题



标签:count,Thread,++,t2,安全,线程,AddNumber
From: https://www.cnblogs.com/tomwulog/p/18151147

相关文章

  • 线程池
    线程池前言在执行一个异步任务或并发任务时,往往是通过直接newThread()方法来创建新的线程,这样做弊端较多,更好的解决方案是合理地利用线程池,线程池的优势很明显,如下:降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,无需......
  • 多线程
    1.线程(Thread)和进程(Process) 进程是操作系统分配的实例,它是由操作系统分配的单元 线程是进程的执行单元,由操作系统进行调度,一个进程可以有多个线程,这些线程共享一个进程的资源 进程是相互独立的,他们之间不会相互影响 线程是共享相同进程的资源,因此一个线程可能会影响所在的......
  • 网络安全数字孪生:一种新颖的汽车软件解决方案
    摘要    随着汽车行业转变为数据驱动的业务,软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加,相应的网络安全风险、责任和监管也随之增加,传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加的风险。   一种解决......
  • hdparm安全擦
    hdparm是一个用于控制硬盘驱动器的命令行工具,它可以执行一系列的硬盘操作,包括安全擦除数据。以下是使用hdparm工具进行安全擦除的步骤:步骤1:安装hdparm(如果尚未安装)如果您的系统尚未安装hdparm,请使用适用于您的操作系统的包管理器进行安装。例如,在Ubuntu上,您可以使用以下......
  • Linux应用程序获取线程栈的信息
    一.参考网址1. Linux应用程序设计:用一种讨巧方式,来获取线程栈的使用信息2.chatGPT的输出二.代码实战1.适用于ARM的汇编代码1#define_GNU_SOURCE//没有此句话,则编译会出错23#include<stdio.h>4#include<string.h>5#include<pthread.h......
  • 线程池的运行逻辑与你想象的不一样,它是池族中的异类
    只要是web项目,程序都会直接或间接使用到线程池,它的使用是如此频繁,以至于像空气一样,大多数时候被我们无视了。但有时候,我们会相当然地认为线程池与其它对象池(如:数据库连接池)一样,要用的时候向池子索取,用完后归还给它即可。然后事实上,线程池独树一帜、鹤立鸡群,它与普通的对象池就是......
  • 保障跨域数据交换安全可控,跨域数据管控方案了解一下!
    跨域数据管控是指当数据从一个安全域(通常由单一组织控制)传输到另一个安全域时,对数据的流动和使用进行管理和控制的过程。这通常涉及到确保数据的安全性、合规性以及完整性,同时允许在不同组织或地理位置间进行有效的数据交换。跨域数据管控需要围绕三个风险展开:数据泄露风险、数......
  • 物理隔离条件下的数据安全导入导出方案,哪种最安全可控?
    数据安全在当今信息化社会中扮演着至关重要的角色,尤其像政府、军工等单位,有比较多的核心数据要保护,一旦出现数据泄漏,将造成不可估量的后果。因此为了保护数据安全,政府、军工等单位一般会采取纯物理隔离,隔离后再通过导入导出工具,将数据安全导入导出。在实现纯物理隔离的内外网环......
  • Java 线程安全思路
    线程安全1、先来了解一下:为什么多线程并发是不安全的?****在操作系统中,线程是不拥有资源的,进程是拥有资源的。而线程是由进程创建的,一个进程可以创建多个线程,这些线程共享着进程中的资源。所以,当线程一起并发运行时,同时对一个数据进行修改,就可能会造成数据的不一致性,看下面的例......
  • 对于前三次的pta题集练习,由于我的偷懒和迟钝,有许多部分没有完成,但在此我还是对题目集
    第一道大题题目信息7-1答题判题程序-1分数50作者蔡轲单位南昌航空大学设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。输入格式:程序输入信息分三部分:1、题目数量格式:整数数值,若超过1位最高位不能为0,......