首页 > 其他分享 >mutex.Lock():是否需要加锁,何时加?

mutex.Lock():是否需要加锁,何时加?

时间:2023-04-23 11:59:15浏览次数:22  
标签:wsc 加锁 websocket WriteJSON Lock mutex

流加锁,包不用加锁

传输层的TCP是基于流的传输,需要加锁,
应用层的WebSocket是基于包的传输,同时写也不会导致数据混乱,不需要加锁。

所以,在*websocket.Conn.WriteJSON(data)时,不需要前后加锁

以下代码中的mutex.Lock()没必要:
wsc.mutex.Lock() //由于websocket不支持并发写入,所以需要在写消息的地方都需加上互斥锁,不要则会报错:concurrent write to websocket connection go  这个说法不对,ws支持并发??【有空自己测一下】

wsc.conn.WriteJSON(sdata) //WriteJSON和WriteMessage区别?WriteJSON相当于在原基础上序列化了,人眼可见的形式。
// wsc.conn.WriteMessage(1, sdata) //

wsc.mutex.Unlock() //对c对象上的mutex进行解锁。

</details>

标签:wsc,加锁,websocket,WriteJSON,Lock,mutex
From: https://www.cnblogs.com/sybil-hxl/p/17346080.html

相关文章

  • Unlock the Power of High-Performance Networking with the IPQ9554
    UnlockthePowerofHigh-PerformanceNetworkingwiththeIPQ9554Intoday'sworld,reliableandhigh-speedinternetconnectivityisessentialforeverythingfromonlinegamingandstreamingtoremoteworkandlearning.Whetheryou'reaconsumer......
  • apt-get update 出现E: Could not get lock /var/lib/apt/lists/lock问题的解决
    Ubuntu在更新软件源时,出现E:Couldnotgetlock/var/lib/apt/lists/lock问题查看哪些进程在占用资源ps-e|grepapt3231?00:00:00apt.systemd.dai3235?00:00:00apt.systemd.dai从以上的结果看到占用资源的的PID(进程号)是3231和3235,那么kill掉这两......
  • 为什么Sync.Pool不需要加锁却能保证线程安全
    1.简介我们在Sync.Pool:提高go语言程序性能的关键一步一文中,已经了解了使用sync.Pool来实现对象的复用以减少对象的频繁创建和销毁,以及使用sync.Pool的一些常见注意事项。在这篇文章中,我们将剖析sync.Pool内部实现中,介绍了sync.Pool比较巧妙的内部设计思路以及其实现方式。......
  • synchronized关键字、ReentrantLock
    synchronized是Java中的一个关键字,同步,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。在Java早期版本中,synchronized属于重量级锁,效率低下。这是因为监视器锁(monitor)是依赖于底层的操作系统的Mutex......
  • RT-Mutex-3——实现分析-pi-futex与rt-mutex
    一、rt-mutex的原理PI-futex是通过rtmutex来实现的,因此我们这里简单的聊一聊内核的这个PI-awaremutex。从rtmutex的视角看任务:rt_mutex_waiter用来抽象一个阻塞在rtmutex的任务:task成员指向这个任务,lock成员指向对应的rtmutex对象,tree_entry是挂入blocker红黑......
  • redisson lock的使用
    1.现在错误的用法:RLocklock=redisson.getLock(String.format(LOCK_KEY,2));try{if(lock.tryLock()){//处理logger.info("aaaaaaaaaaaaaaaaaa");}catch(Exceptione){//处理异常}finally{if(lock.isLocked()){lock.unlock();}}测试......
  • ReentrantReadWriteLock
     1)背景   jni的使用场景,多线程读,单线程写,写的时候会更新java对象,当老的java对象无须再使用的时候必须释放jni所占用本地方法区的内存,这个区域的内存不在javaheap范畴,因此也无法被垃圾回收掉,需要显式的释放。但问题在于什么释放?有人会说使用finalize,但finalize过于依赖jvm的......
  • 31 30 | 答疑文章(二):用动态的观点看加锁
    在第20和21篇文章中,我和你介绍了InnoDB的间隙锁、next-keylock,以及加锁规则。在这两篇文章的评论区,出现了很多高质量的留言。我觉得通过分析这些问题,可以帮助你加深对加锁规则的理解。所以,我就从中挑选了几个有代表性的问题,构成了今天这篇答疑文章的主题,即:用动态的观点看加锁。......
  • Java偏向锁实现原理(Biased Locking)
    评:阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lockrecord,markword之类的名词。可以参考我的一篇博文:Java轻量级锁原理详解(LightweightLocking)Java偏向锁(BiasedLocking)是Java6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行......
  • Unlock the Power of High-Performance Networking with the IPQ9554
     Intoday'sworld,reliableandhigh-speedinternetconnectivityisessentialforeverythingfromonlinegamingandstreamingtoremoteworkandlearning.Whetheryou'reaconsumerorabusiness,youneedanetworkingsolutionthatcanhandleh......