首页 > 其他分享 >多线程lock 为什么要lock,lock了什么?

多线程lock 为什么要lock,lock了什么?

时间:2023-02-19 09:11:26浏览次数:28  
标签:objectA 为什么 lock codeB 线程 操作 多线程

一. 为什么要lock,lock了什么?

当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,
就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源在同一时刻只能被一个线程操作,
以确保每个操作都是有效即时的,也即保证其操作的原子性。lock是C#中最常用的同步方式,格式为lock(objectA){codeB} 。

lock(objectA){codeB} 看似简单,实际上有三个意思,这对于适当地使用它至关重要:
1. objectA被lock了吗?没有则由我来lock,否则一直等待,直至objectA被释放。
2. lock以后在执行codeB的期间其他线程不能调用codeB,也不能使用objectA。
3. 执行完codeB之后释放objectA,并且codeB可以被其他线程访问。

https://blog.csdn.net/jia1909756547/article/details/106209305/

标签:objectA,为什么,lock,codeB,线程,操作,多线程
From: https://www.cnblogs.com/dongxizhen/p/17134206.html

相关文章

  • 【多线程与高并发】- synchronized锁的认知
    synchronized锁的认知......
  • 多线程2
    1、在我们实际使⽤中,线程池的⼤⼩配置多少合适?对于计算密集型,设置线程数=CPU数+1;对于I/O密集型,线程数=CPU数*CPU利⽤率*(任务等待时间/(任务计算时间+1))......
  • Python多进程与多线程
    多进程更适合CPU密集型任务,而多线程更适合IO密集型任务。多进程multiprocessing模块importmultiprocessingdefmy_function(arg1,arg2):print("Dosomethingw......
  • JAVA多线程(二)--线程池
    JAVA多线程(二)--线程池一、线程池概念顾名思义,线程池是管理线程的池子。使用线程池有以下优点:降低线程创建和销毁的开销。提高响应速度。用到时创建和直接使用已创建......
  • 多线程
    一、Process与Thread1.进程是执行程序的一次执行过程,是系统资源分配的单位。2.一个进程可以包含若干个线程,至少有一个线程。 二、三种创建方式1.......
  • 微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新
    写在前面关于Playwright系列的文章,真的很久没有写了,今天一个不小心官方API部分过完了,下面将为大家逐一演示,感兴趣的同学可以自行动手练习。API部分多线程直白点说就是......
  • 为什么子进程要继承处理器亲缘性?
    请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序)这是因为手头的任务被分解为子任务,无论出于何种原因,这些子任务都被放入子流程中。......
  • 线程池的回调工作函数为什么必须设置成static,类内静态成员函数?
    线程池的回调工作函数为什么必须设置成static,类内静态成员函数?pthread_create(pthread_t*thread_tid,constpthread_attr_t*attr,void*(*start_routine)(void*),......
  • 为什么C++既有指针又有引用?
    C++从C继承了指针,所以我不能在不导致严重的兼容性问题的情况下删除它们。引用在很多方面都很有用,但我在C++中引入它们的直接原因是为了支持运算符重载。例如:void......
  • 为什么默认情况下析构函数不是虚拟的
    因为很多类并不是设计来作为基类使用的,虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)。那么我什么时候应该声明一个析构函数为虚拟的呢?......