i**e 发帖数: 604 | 1 所谓的lock free,是指用std::lock_guard 么?感觉lock_guard像
wrapper。。。
请问还有别的好方法么?
刚刚开始看,要是能大方向上指点我一下就更好了!谢谢!:) |
s*w 发帖数: 729 | 2 lock_guard 就是 lock 自动释放
lock free 是指 async
【在 i**e 的大作中提到】 : 所谓的lock free,是指用std::lock_guard 么?感觉lock_guard像 : wrapper。。。 : 请问还有别的好方法么? : 刚刚开始看,要是能大方向上指点我一下就更好了!谢谢!:)
|
s********u 发帖数: 1109 | |
i**e 发帖数: 604 | 4 这样啊!那要把async好好看看。。。能请你例举一下C++ multithreading应用里最重
要的几部分么?我看的时候,tutorial总是循序渐进的,推翻前面简单幼稚的思路,很
希望提前知道一下最先进的有哪些~ :)谢谢!
【在 s*w 的大作中提到】 : lock_guard 就是 lock 自动释放 : lock free 是指 async
|
i**e 发帖数: 604 | |
l*n 发帖数: 529 | 6 async一般是指IO non blocking,跟lock free不沾边。
lock free是指通过多用immutable或者atomic compare and swap等来避开lock的使用。
【在 s*w 的大作中提到】 : lock_guard 就是 lock 自动释放 : lock free 是指 async
|
s*w 发帖数: 729 | 7 我前一阵子刚使劲看过 C++11 里面的 multithreading
对 thread, mutex, lock_guard, condition_variable 比较熟悉, C++11 没
semaphore, 最高深的使用 promise/future, async 来做,还不大会
【在 i**e 的大作中提到】 : 这样啊!那要把async好好看看。。。能请你例举一下C++ multithreading应用里最重 : 要的几部分么?我看的时候,tutorial总是循序渐进的,推翻前面简单幼稚的思路,很 : 希望提前知道一下最先进的有哪些~ :)谢谢!
|
s*w 发帖数: 729 | 8 恩多些提醒,我再钻研一下这个区别
用。
【在 l*n 的大作中提到】 : async一般是指IO non blocking,跟lock free不沾边。 : lock free是指通过多用immutable或者atomic compare and swap等来避开lock的使用。
|
|
a****Q 发帖数: 83 | 9 不觉得lock需要基于某种语言来看,基本的思路都是一样的,当然,配合上语言,实现起
来会有不区别:
简单讲就lock和lock free
lock 具体实现:
Java: concurrency package
C/C++; pthread, C11
Linux kernel: spinlock_t, semaphore/mutex, rwlock_t.
Kernel的实现相对复杂一点,因为要区分当前的context,spinlock_t/rwlock_t会屏蔽中
断,所以不能block当前进程,比如不能分配内存,不能有磁盘或是网络读写.其他的和
user space的实现没有概念上的区别.
lock free 的实现实质上就是把lock从一段代码进一步精确到一条或是几条代码,所以
需要硬件上的配合.最实质的就是如何运用memory fence(也就是memory barrier)和CAS
(compare and swap)指令.
具体的实现:
Java: final/volatile/atomic variables;
ass/C/C++: 在C11出来之前很多都是直接内嵌汇编指令,C11出来后有了C++的memory
model,也提供了不少接口.
Linux kernel: 除了直接内嵌汇编指令外,很多都使用RCU.
不少这方面的资料:
Java的话JCIP差不多是这方面的必备;
C/C++的话可以看pthread和C++ concurrency in practice(written by anthony)
Linux kernel: 直接看Linux/Documentation |
s********u 发帖数: 1109 | 10 c++里的mutex,和java里的lock主要是什么区别呢?好像是说mutex是system wise的?
还有就是mutex有没有thread ownership这种概念,就是一个thread的mutex不能由另一
个来unlock。
【在 s*w 的大作中提到】 : 我前一阵子刚使劲看过 C++11 里面的 multithreading : 对 thread, mutex, lock_guard, condition_variable 比较熟悉, C++11 没 : semaphore, 最高深的使用 promise/future, async 来做,还不大会
|
|
|
s*w 发帖数: 729 | 11 不懂 java ,所以不知道区别; c++ 的 mutex 在 linux 里面就是 pthread 的
东西,不过我曾经想看看到底是怎么定义的,没看懂,貌似就是个整数union;要是有
大拿来讲讲就好了
mutex 是有owner 的,不能去 lock/unlock 别人的
semaphore 没 owner, 不过 c++11 没有
【在 s********u 的大作中提到】 : c++里的mutex,和java里的lock主要是什么区别呢?好像是说mutex是system wise的? : 还有就是mutex有没有thread ownership这种概念,就是一个thread的mutex不能由另一 : 个来unlock。
|
s********u 发帖数: 1109 | 12 说的很清楚,谢谢!
【在 s*w 的大作中提到】 : 不懂 java ,所以不知道区别; c++ 的 mutex 在 linux 里面就是 pthread 的 : 东西,不过我曾经想看看到底是怎么定义的,没看懂,貌似就是个整数union;要是有 : 大拿来讲讲就好了 : mutex 是有owner 的,不能去 lock/unlock 别人的 : semaphore 没 owner, 不过 c++11 没有
|
g****o 发帖数: 547 | 13 lock free不是mutex,是atomic相关的
用compare_exchange_weak之类的函数 |
i**e 发帖数: 604 | 14 多谢各位指点!看来是atomic, compare_% 这些:)
呵呵,atomic 这名字起得不错呀。。。赞! |
d******3 发帖数: 70 | |
s********u 发帖数: 1109 | 16 晚上花时间看了下,非常好的教程,2个小时就能get a whole picture.
【在 d******3 的大作中提到】 : 这个会有帮助: : http://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0h
|