際際滷

際際滷Share a Scribd company logo
亳仄亳亳于 亳仆仂仆亳亰舒亳亳
舒仍亳亠仆从仂 ..
 2014
仂仗从舒  1
class LockOne implements Lock {
// thread-local index, 0 or 1
private boolean[] flag = new boolean[2];
public void lock() {
int i = ThreadID.get();
int j = 1 - i;
flag[i] = true;
while (flag[j]) {} // wait
}
public void unlock() {
int i = ThreadID.get();
flag[i] = false;
}
}
仂仗从舒  2
class LockTwo implements Lock {
private volatile int victim;
public void lock() {
int i = ThreadID.get();
victim = i;
// let the other go first
while (victim == i) {} // wait
}
public void unlock() {}
}
Mutex 亟仍 2 仗仂仂从仂于
class Peterson implements Lock {
// thread-local index, 0 or 1
private volatile boolean[] flag = new boolean[2];
private volatile int victim;
public void lock() {
int i = ThreadID.get();
int j = 1 - i;
flag[i] = true; // Im interested
victim = i; // you go first
while (flag[j] && victim == i) {}; // wait
}
public void unlock() {
int i = ThreadID.get();
flag[i] = false; //Im not interested
}
}
仍亞仂亳仄 弍仍仂仆亳从舒
class Bakery implements Lock {
boolean[] flag;
Label[] label;
public Bakery (int n) {
flag = new boolean[n];
label = new Label[n];
for (int i = 0; i < n; i++) {
flag[i] = false; label[i] = 0;
}
}
public void lock() {
int i = ThreadID.get();
flag[i] = true;
label[i] = max(label[0], ...,label[n-1]) + 1;
while ((k != i)(flag[k] && (label[k],k) <<
(label[i],i))) {};
}
public void unlock() {
flag[ThreadID.get()] = false;
}
}
POSIX mutex
丐亳仗: pthread_mutex_t
亳亰仆:

亳仆亳亳舒仍亳亰舒亳:亳仆亳亳舒仍亳亰舒亳:
pthread_mutex_init 亳仍亳 PTHREAD_MUTEX_INITIALIZER

亰舒仗仂 仆舒 仄仂仆仂仗仂仍仆仂亠 亳仗仂仍亰仂于舒仆亳亠:亰舒仗仂 仆舒 仄仂仆仂仗仂仍仆仂亠 亳仗仂仍亰仂于舒仆亳亠:
pthread_mutex_lock 亳仍亳
pthread_mutex_timedlock

仂从舒亰 仂 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳:仂从舒亰 仂 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳:
pthread_mutex_unlock

亠亳仂于舒仆亳亠 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳:亠亳仂于舒仆亳亠 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳:
pthread_mutex_trylock

舒亰亠仆亳亠:舒亰亠仆亳亠:
pthread_mutex_destroy
mutex && recursive_mutex
个仆从亳亳:个仆从亳亳:
 舒于舒: void lock();
 仂仗舒 亰舒于舒亳: bool try_lock();
 于仂弍仂亟亳: void unlock();
timed_mutex &&
recursive_timed_mutex
个仆从亳亳:个仆从亳亳:
 丐仂 亢亠, 仂  mutex && recursive_mutex
 舒于舒: void lock();
 仂仗舒 亰舒于舒亳: bool try_lock();
 于仂弍仂亟亳: void unlock();
 + 舒于舒  仂亞舒仆亳亠仆亳亠仄: timed_lock(...);
shared_mutex
个仆从亳亳:个仆从亳亳:
 丐仂 亢亠, 仂  [recursive_]timed_mutex
 舒于舒: void lock();
 仂仗舒 亰舒于舒亳: bool try_lock();
 于仂弍仂亟亳: void unlock();
 舒于舒  仂亞舒仆亳亠仆亳亠仄: void timed_lock(...);
 + 舒于舒 仆舒 亠仆亳亠: void [timed_]lock_shared();
 + 舒于舒 仆舒 亠仆亳亠  于仂亰仄仂亢仆仂
束亟仂亰舒于舒舒損 仆舒 亰舒仗亳: void lock_upgrade();
spin_mutex
个仆从亳亳:个仆从亳亳:
 丐仂 亢亠, 仂  timed_mutex
 舒于舒: void lock();
 仂仗舒 亰舒于舒亳: bool try_lock();
 于仂弍仂亟亳: void unlock();
 舒于舒  仂亞舒仆亳亠仆亳亠仄: void timed_lock(...);
仍亳亳亠:仍亳亳亠:
 从亳于仆仂亠 仂亢亳亟舒仆亳亠 仆舒 亰舒于舒亠
CAS-仂仗亠舒亳亳
CAS  compare-and-set, compare-and-swap
bool compare_and_set(
 int* <舒亟亠 仗亠亠仄亠仆仆仂亶>,
 int <舒仂亠 亰仆舒亠仆亳亠>,
 int <仆仂于仂亠 亰仆舒亠仆亳亠>)
 仂亰于舒舒亠 仗亳亰仆舒从 仗亠仆仂亳 仂仗亠舒亳亳
舒仆仂于从亳 亰仆舒亠仆亳
 仂仄舒仆舒 仆舒 仂于仆亠 仗仂亠仂舒 (CPU: i486+):
cmpxchg
亠亳仄亠于舒 CAS
 亊于仍磳 舒仗仗舒舒仆仄 仗亳仄亳亳于仂仄
 仂亰仄仂亢仆仂 仗仂亟仂仍亢亠仆亳 亰舒于舒舒
仗亳仄亳亳于舒 弍亠亰 仂弍磶舒亠仍仆仂亞仂 仗亠亠仂亟舒 于
亠亢亳仄 束仂亢亳亟舒仆亳晛
 亠仆亠 于亠仂仆仂 于仂亰仆亳从仆仂于亠仆亳
弍仍仂从亳仂于从亳 亳亰-亰舒 弍仂仍亠亠 仄亠仍从仂亶 仂仗亠舒亳亳
 仂仍亠亠 弍舒 (仗舒于亟舒 仆亠 于 仍仂于亳
亢从仂亶 从仂仆从亠仆亳亳)
亳仄亠 CAS 亳仆从亠仄亠仆舒
/**
油*油Atomically油increments油by油one油the油current油value.
油*油@return油the油updated油value
油*/
public油final油int油incrementAndGet()油{
油油油油for油(;;)油{
油油油油油油油油int油current油=油get();
油油油油油油油油int油next油=油current油+油1;
油油油油油油油油if油(compareAndSet(current,油next))
油油油油油油油油油油油油return油next;
油油油油}
}
亠仍亳亰舒亳 spin_mutex
ム亠从
舒 仗亳仄亠亠 boost:舒 仗亳仄亠亠 boost:
 mutex
 recursive_mutex
 timed_mutex
 recursive_timed_mutex
 shared_mutex
 spin_mutex
舒仄从亳
 lock_guard
 unique_lock
 shared_lock
 upgrade_lock
 upgrade_to_unique_lock
lock_guard
 舒于舒 于 从仂仆从仂亠
 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠
 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于
 舒于舒: void lock();
 于仂弍仂亟亳: void unlock();
unique_lock
 丐仂 亢亠, 仂 lock_guard
 + 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于
 仂仗舒 亰舒于舒亳: bool try_lock();
 舒于舒  仂亞舒仆亳亠仆亳亠仄: void timed_lock(...);
 + 仂仗仂仍仆亳亠仍仆亠 仆从亳亳 仗仂仍亠仆亳
仄ム亠从舒, 仗仂于亠从亳 束亰舒于舒亠仆仆仂亳損...
shared_lock
 亠亟仆舒亰仆舒亠仆亳 亟仍 舒弍仂  shared_mutex
 舒于舒 仆舒 亠仆亳亠
 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠
 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于
 舒于舒: void [timed_]lock_shared();
 于仂弍仂亟亳: void unlock_shared();
upgrade_lock
 亠亟仆舒亰仆舒亠仆亳 亟仍 舒弍仂  shared_mutex
 舒于舒 仆舒 亠仆亳亠  于仂亰仄仂亢仆仂
束亟仂亰舒于舒舒損 仆舒 亰舒仗亳
 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠
 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于
 舒于舒: void lock_upgrade();
 于仂弍仂亟亳: void unlock_upgrade();
upgrade_to_unique_lock
 亠亟仆舒亰仆舒亠仆亳 亟仍 舒弍仂  upgrade_lock
 舒于舒 仆舒 亰舒仗亳 仗仂仍亠 亰舒于舒舒 仆舒 亠仆亳亠
 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠
 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于
 舒于舒: void unlock_upgrade_and_lock();
 于仂弍仂亟亳: void unlock_and_lock_upgrade();
亳仄亠仆亠仆亳亠 亰舒仄从仂于
 ム亠从 亳仄亠亠 于仂亶 typedef 仆舒 scoped_lock:
 mutex:
typedef unique_lock<mutex> scoped_lock;
 recursive_mutex:
typedef unique_lock<recursive_mutex> scoped_lock;
 timed_mutex:
typedef unique_lock<timed_mutex> scoped_timed_lock;
typedef scoped_timed_lock scoped_lock;
 丕亟仂弍仆亠亠 亰舒于舒于舒:
boost::mutex::scoped_lock l(m);
Futex
Futex - 'Fast Userspace muTexes'
 亳仄亠仆ム 亟仍 亠舒仍亳亰舒亳亳 POSIX mutex
 仂仗亠仆  磲舒 2.5.40
  亠舒仍亳亰舒亳亳 亳仗仂仍亰亠  CAS  仗仂亳
于亠 仂仗亠舒亳亳 仗仂于仂亟 于 仗仂舒仆于亠
仗仂仍亰仂于舒亠仍
亠舒仍亳亰舒亳 futex
174 static void
175 futexunlock(Lock *l)
176 {
177 uint32 v;
178
179 v = runtime揃xchg(&l->key, MUTEX_UNLOCKED);
180 if(v == MUTEX_UNLOCKED)
181 runtime揃throw("unlock of unlocked lock");
182 if(v == MUTEX_SLEEPING)
183 futexwakeup(&l->key, 1);
184 }
亳亳亠从舒 亠从亳
 舒亰仆亳舒  仄ム亠从仂仄 于仂 仄仆仂亞仂仄
亠仄亳仆仂仍仂亞亳亠从舒
 亳亳亠从舒 亠从亳  仆亠 仂弍亠从 磲舒 弌
 仗仂仍亰仂于舒仆亳亠 舒仆舒仍仂亞亳仆舒 pthread_mutex_t
 InitializeCriticalSection
 ::EnterCriticalSection(&m_lock);
 ::LeaveCriticalSection(&m_lock);
 仍 亟仂弍于舒 舒从亢亠 从舒从 亳  仄ム亠从舒仄亳
亳仗仂仍亰ム 亰舒仄从亳: CScopeLock...
Interlocked-仆从亳亳
 丐仂亢亠 舒弍仂舒ム 于 仗仂舒仆于亠 仗仂仍亰仂于舒亠仍, 仆亠
仗亠亠于仂亟 仗仂亠 于 亠亢亳仄 仂亢亳亟舒仆亳, 舒从 从舒从
仂仆仂于舒仆 仆舒 CAS-仂仗亠舒亳
 亳仄亠:
 InterlockedIncrement(&var)
 InterlockedExchange
 InterlockedCompareExchange
 ...
舒亠于 亟仍 N 仗仂仂从仂于
#define SYNC_MAX_COUNT 10
void SynchronizationPoint() {
static mutex_t sync_lock = PTHREAD_MUTEX_INITIALIZER;
static cond_t sync_cond = PTHREAD_COND_INITIALIZER;
static int sync_count = 0;
/* 弍仍仂从亳仂于从舒 亟仂仗舒 从 亠亳从 */
pthread_mutex_lock(&sync_lock);
sync_count++;
/* 仗仂于亠从舒: 仍亠亟亠 仍亳 仗仂亟仂仍亢舒 仂亢亳亟舒仆亳亠 */
if (sync_count < SYNC_MAX_COUNT)
pthread_cond_wait(&sync_cond, &sync_lock);
else
/* 仂仗仂于亠亳 仂 亟仂亳亢亠仆亳亳 亟舒仆仆仂亶 仂从亳 于亠仄亳 */
pthread_cond_broadcast(&sync_cond);
/* 舒从亳于亳亰舒亳 于亰舒亳仄仆仂亶 弍仍仂从亳仂于从亳 - 于 仗仂亳于仆仂仄 仍舒亠
亳亰 仗仂亠亟 仄仂亢亠 于亶亳 仂仍从仂 仂亟仆舒 仆亳! */
pthread_mutex_unlock(&sync_lock);
}
丕仍仂于仆亠 仗亠亠仄亠仆仆亠
 亢仆 从舒从 仄亠舒仆亳亰仄 于亰舒亳仄仂亟亠亶于亳
仗仂仂从仂于, 于 仂仍亳亳亠 仂 仄ム亠从仂于
 亠亞亟舒 亳仗仂仍亰亠  仄ム亠从仂仄
 亠亟仆舒亰仆舒亠仆舒 亟仍 于亠亟仂仄仍亠仆亳 仂弍亳亳
 仂仄舒仆仂 仂于仂弍仂亢亟舒亠 仄ム亠从 仗亳 wait()
 丱仂仂仂 仗仂亟仂亟亳 亟仍 亰舒亟舒 亳仗舒
束仗仂亳亰于仂亟亳亠仍-仗仂亠弍亳亠仍損
 仍 boost: boost::condition
POSIX condition variable
丐亳仗: pthread_cond_t
亳亰仆:

亳仆亳亳舒仍亳亰舒亳:亳仆亳亳舒仍亳亰舒亳:
pthread_cond_init 亳仍亳
PTHREAD_C OND_INITIALIZER

仂亢亳亟舒仆亳亠仂亢亳亟舒仆亳亠
pthread_cond_wait 亳仍亳
pthread_cond_timedwait

亳亞仆舒仍亳亰舒亳:亳亞仆舒仍亳亰舒亳:
pthread_cond_signal 亳仍亳 pthread_cond_broadcast

舒亰亠仆亳亠:舒亰亠仆亳亠:
pthread_cond_destroy
亳仄亠 亳仗仂仍亰仂于舒仆亳
public void prepareData() {
synchronized (monitor) {
System.out.println("Data prepared");
ready = true;
monitor.notifyAll();
}
}
public void sendData() {
synchronized (monitor) {
System.out.println("Waiting for data...");
while (!ready) {
try {
monitor.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Sending data...");
}
}
仗亳仄舒仍仆仂亠 亳仍仂 仗仂仂从仂于
Boost:
boost::thread::hardware_concurrency()boost::thread::hardware_concurrency()
Java:
Runtime.getRuntime().availableProcessors()Runtime.getRuntime().availableProcessors()

More Related Content

What's hot (20)

个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶 仗仂仄仂 D...
个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶  仗仂仄仂 D...个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶  仗仂仄仂 D...
个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶 仗仂仄仂 D...
Yandex
丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...
丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...
丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...
Alexey Paznikov
丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...
丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...
丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...
Alexey Paznikov
200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒
200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒
200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒
Andrey Karpov
SSL/TLS: 亳仂亳 磶于亳仄仂亠亶
SSL/TLS: 亳仂亳 磶于亳仄仂亠亶SSL/TLS: 亳仂亳 磶于亳仄仂亠亶
SSL/TLS: 亳仂亳 磶于亳仄仂亠亶
Positive Hack Days
丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...
丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...
丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...
Alexey Paznikov
丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...
丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...
丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...
Alexey Paznikov
丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒
丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒
丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒
Alexey Paznikov
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
Alex Tumanoff
仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...
仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...
仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...
Sergey Platonov
丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...
丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...
丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...
Alexey Paznikov
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
corehard_by
Parallel STL
Parallel STLParallel STL
Parallel STL
Evgeny Krutko
仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損
仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損
仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損
e-Legion
Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄
Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄
Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄
corehard_by
丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...
丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...
丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...
Alexey Paznikov
仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM
仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM
仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM
Sergey Platonov
仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...
仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...
仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...
Alexey Paznikov
亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳
亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳
亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳
Sergey Platonov
个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶 仗仂仄仂 D...
个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶  仗仂仄仂 D...个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶  仗仂仄仂 D...
个亳仍亳仗仗 丐仂亳仆从亳亶 束仆舒仍亳亰 仗仂亳亰于仂亟亳亠仍仆仂亳 亳 仂仍舒亟从舒 仗亳仍仂亢亠仆亳亶 仗仂仄仂 D...
Yandex
丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...
丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...
丐 - 于亠仆舒 2015 - 亠从亳 6. 舒亰舒弍仂从舒 仗舒舒仍仍亠仍仆 从 亟舒仆仆 仆舒 仂仆仂于...
Alexey Paznikov
丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...
丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...
丐 - 仂亠仆 2014 - 亠从亳 6 - 仂仄舒仆亠 仂仗亠舒亳亳. 仆亠仂亠亠亟仆仂亠 于仗仂仍仆亠仆亳亠 亳仆...
Alexey Paznikov
200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒
200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒
200 open source 仗仂亠从仂于 仗: 仂仗 舒亳亠从仂亞仂 舒仆舒仍亳亰舒 亳仂亟仆仂亞仂 从仂亟舒
Andrey Karpov
SSL/TLS: 亳仂亳 磶于亳仄仂亠亶
SSL/TLS: 亳仂亳 磶于亳仄仂亠亶SSL/TLS: 亳仂亳 磶于亳仄仂亠亶
SSL/TLS: 亳仂亳 磶于亳仄仂亠亶
Positive Hack Days
丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...
丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...
丐 - 仂亠仆 2014 - 亠从亳 7. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 弍仍仂从亳仂于仂从. ...
Alexey Paznikov
丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...
丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...
丐 - 仂亠仆 2014 - 亠从亳 4 - 弌舒仆亟舒 POSIX Threads. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆...
Alexey Paznikov
丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒
丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒
丐 - 于亠仆舒 2015 - 亠从亳 0. 仗亳舒仆亳亠 从舒
Alexey Paznikov
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
Alex Tumanoff
仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...
仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...
仍亠从舒仆亟 丐舒舒亠仆从仂, 仗仂仍亰仂于舒仆亳亠 python 亟仍 舒于仂仄舒亳亰舒亳亳 仂仍舒亟从亳 弌/C++ 从仂亟...
Sergey Platonov
丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...
丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...
丐 - 于亠仆舒 2015 - 亠从亳 8. 仆仂亞仂仗仂仂仆仂亠 仗仂亞舒仄仄亳仂于舒仆亳亠 弍亠亰 亳仗仂仍亰仂于舒仆亳...
Alexey Paznikov
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
corehard_by
仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損
仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損
仍舒亟亳仄亳 仂弍亠仆从仂 束仗仂仍亰仂于舒仆亳亠 弍仍仂从仂于 于 Objective-C損
e-Legion
Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄
Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄
Boost.Algorithm: 仂, 亰舒亠仄 亳 仗仂亠仄
corehard_by
丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...
丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...
丐 - 于亠仆舒 2015 - 亠从亳 3. 亠亠仆亠舒弍亠仍仆仂. 弌亳亞仆舒仍. 仂从舒仍仆亠 亟舒仆仆亠 仗仂...
Alexey Paznikov
仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM
仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM
仄亳亳亶 舒亳仆, 丐仂仍仍亠亶弍 亳亰 弍舒仆从亳: 舒仍亳舒亳仆亞 亳 于亠从仂亳亰舒亳 于 LLVM
Sergey Platonov
仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...
仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...
仍舒亞亳仆 .., 舒亰仆亳从仂于 .., 仆仂仂于 .. 仗亳仄亳亰舒亳 亳仆仂仄舒亳仂仆仆 仂弍仄亠仆仂于...
Alexey Paznikov
亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳
亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳
亳亞仂亳亶 亠仄亠仆从仂, 亳仆仂仆仆仂 亳 仆亠弍仍仂从亳ム舒 亳仆仂仆亳亰舒亳
Sergey Platonov

Similar to 20140310 parallel programming_kalishenko_lecture03-04 (14)

于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶
于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶
于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶
CUSTIS
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Fedor Lavrentyev
Thread
ThreadThread
Thread
Alexander Rusin
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google
豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google
豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google
yaevents
丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads
丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads
丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads
Alexey Paznikov
亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄
亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄
亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄
Platonov Sergey
[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
DefconRussia
Lec 14
Lec 14Lec 14
Lec 14
Alexander Rusin
丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳
丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳
丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳
Sergey Teplyakov
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
Eduard Antsupov
SECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
SECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/LinuxSECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
SECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
SECON
C++ STL & Qt. 舒仆亳亠 10.
C++ STL & Qt. 舒仆亳亠 10.C++ STL & Qt. 舒仆亳亠 10.
C++ STL & Qt. 舒仆亳亠 10.
Igor Shkulipa
仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒
仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒
仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒
Alexander Kucherenko
于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶
于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶
于亠亟亠仆亳亠 于 舒亰舒弍仂从 仄仆仂亞仂仗仂仂仆 仗亳仍仂亢亠仆亳亶
CUSTIS
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Fedor Lavrentyev
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
Anton Arhipov
豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google
豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google
豫仆亳-亠亳仂于舒仆亳亠 亳 Google Mock. 仍舒亟 仂亠于, Google
yaevents
丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads
丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads
丐 - 仂亠仆 2014 - 亠从亳 3 - 弌舒仆亟舒 POSIX Threads
Alexey Paznikov
亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄
亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄
亳仆仂仆仆仂 亳 仂仗仂亞舒仄仄
Platonov Sergey
[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
[Defcon Russia #29] 亳舒亳仍 仍亠仄亠仆亠于 - 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
DefconRussia
丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳
丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳
丐仂仆从仂亳 舒亳仆仂仆仆仂亞仂 仗仂亞舒仄仄亳仂于舒仆亳
Sergey Teplyakov
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
Eduard Antsupov
SECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
SECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/LinuxSECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
SECON'2017, 仍亠仄亠仆亠于 亳舒亳仍, 弍仆舒亢亠仆亳亠 从亳仂于 于 GNU/Linux
SECON
C++ STL & Qt. 舒仆亳亠 10.
C++ STL & Qt. 舒仆亳亠 10.C++ STL & Qt. 舒仆亳亠 10.
C++ STL & Qt. 舒仆亳亠 10.
Igor Shkulipa
仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒
仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒
仂亞仂于仂亳仄 仂 JavaScript, 仂仆仂于 亳 仂于亠仄亠仆仆亠 亠仆亟亠仆亳亳 舒亰于亳亳 磶从舒
Alexander Kucherenko

More from Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
Computer Science Club
Computer Vision
Computer VisionComputer Vision
Computer Vision
Computer Science Club
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
Computer Science Club
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
Computer Science Club
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
Computer Science Club
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
Computer Science Club
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
Computer Science Club
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
Computer Science Club
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
Computer Science Club
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
Computer Science Club
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
Computer Science Club
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
Computer Science Club
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
Computer Science Club
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
Computer Science Club
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
Computer Science Club
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
Computer Science Club
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
Computer Science Club
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
Computer Science Club
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
Computer Science Club
20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich
Computer Science Club
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
Computer Science Club
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
Computer Science Club
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
Computer Science Club
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
Computer Science Club
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
Computer Science Club
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
Computer Science Club
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
Computer Science Club
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
Computer Science Club
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
Computer Science Club
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
Computer Science Club
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
Computer Science Club
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
Computer Science Club
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
Computer Science Club
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
Computer Science Club
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
Computer Science Club
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
Computer Science Club
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
Computer Science Club
20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich20131006 h10 lecture2_matiyasevich
20131006 h10 lecture2_matiyasevich
Computer Science Club

20140310 parallel programming_kalishenko_lecture03-04

  • 2. 仂仗从舒 1 class LockOne implements Lock { // thread-local index, 0 or 1 private boolean[] flag = new boolean[2]; public void lock() { int i = ThreadID.get(); int j = 1 - i; flag[i] = true; while (flag[j]) {} // wait } public void unlock() { int i = ThreadID.get(); flag[i] = false; } }
  • 3. 仂仗从舒 2 class LockTwo implements Lock { private volatile int victim; public void lock() { int i = ThreadID.get(); victim = i; // let the other go first while (victim == i) {} // wait } public void unlock() {} }
  • 4. Mutex 亟仍 2 仗仂仂从仂于 class Peterson implements Lock { // thread-local index, 0 or 1 private volatile boolean[] flag = new boolean[2]; private volatile int victim; public void lock() { int i = ThreadID.get(); int j = 1 - i; flag[i] = true; // Im interested victim = i; // you go first while (flag[j] && victim == i) {}; // wait } public void unlock() { int i = ThreadID.get(); flag[i] = false; //Im not interested } }
  • 5. 仍亞仂亳仄 弍仍仂仆亳从舒 class Bakery implements Lock { boolean[] flag; Label[] label; public Bakery (int n) { flag = new boolean[n]; label = new Label[n]; for (int i = 0; i < n; i++) { flag[i] = false; label[i] = 0; } } public void lock() { int i = ThreadID.get(); flag[i] = true; label[i] = max(label[0], ...,label[n-1]) + 1; while ((k != i)(flag[k] && (label[k],k) << (label[i],i))) {}; } public void unlock() { flag[ThreadID.get()] = false; } }
  • 6. POSIX mutex 丐亳仗: pthread_mutex_t 亳亰仆: 亳仆亳亳舒仍亳亰舒亳:亳仆亳亳舒仍亳亰舒亳: pthread_mutex_init 亳仍亳 PTHREAD_MUTEX_INITIALIZER 亰舒仗仂 仆舒 仄仂仆仂仗仂仍仆仂亠 亳仗仂仍亰仂于舒仆亳亠:亰舒仗仂 仆舒 仄仂仆仂仗仂仍仆仂亠 亳仗仂仍亰仂于舒仆亳亠: pthread_mutex_lock 亳仍亳 pthread_mutex_timedlock 仂从舒亰 仂 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳:仂从舒亰 仂 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳: pthread_mutex_unlock 亠亳仂于舒仆亳亠 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳:亠亳仂于舒仆亳亠 仄仂仆仂仗仂仍仆仂亞仂 亳仗仂仍亰仂于舒仆亳: pthread_mutex_trylock 舒亰亠仆亳亠:舒亰亠仆亳亠: pthread_mutex_destroy
  • 7. mutex && recursive_mutex 个仆从亳亳:个仆从亳亳: 舒于舒: void lock(); 仂仗舒 亰舒于舒亳: bool try_lock(); 于仂弍仂亟亳: void unlock();
  • 8. timed_mutex && recursive_timed_mutex 个仆从亳亳:个仆从亳亳: 丐仂 亢亠, 仂 mutex && recursive_mutex 舒于舒: void lock(); 仂仗舒 亰舒于舒亳: bool try_lock(); 于仂弍仂亟亳: void unlock(); + 舒于舒 仂亞舒仆亳亠仆亳亠仄: timed_lock(...);
  • 9. shared_mutex 个仆从亳亳:个仆从亳亳: 丐仂 亢亠, 仂 [recursive_]timed_mutex 舒于舒: void lock(); 仂仗舒 亰舒于舒亳: bool try_lock(); 于仂弍仂亟亳: void unlock(); 舒于舒 仂亞舒仆亳亠仆亳亠仄: void timed_lock(...); + 舒于舒 仆舒 亠仆亳亠: void [timed_]lock_shared(); + 舒于舒 仆舒 亠仆亳亠 于仂亰仄仂亢仆仂 束亟仂亰舒于舒舒損 仆舒 亰舒仗亳: void lock_upgrade();
  • 10. spin_mutex 个仆从亳亳:个仆从亳亳: 丐仂 亢亠, 仂 timed_mutex 舒于舒: void lock(); 仂仗舒 亰舒于舒亳: bool try_lock(); 于仂弍仂亟亳: void unlock(); 舒于舒 仂亞舒仆亳亠仆亳亠仄: void timed_lock(...); 仍亳亳亠:仍亳亳亠: 从亳于仆仂亠 仂亢亳亟舒仆亳亠 仆舒 亰舒于舒亠
  • 11. CAS-仂仗亠舒亳亳 CAS compare-and-set, compare-and-swap bool compare_and_set( int* <舒亟亠 仗亠亠仄亠仆仆仂亶>, int <舒仂亠 亰仆舒亠仆亳亠>, int <仆仂于仂亠 亰仆舒亠仆亳亠>) 仂亰于舒舒亠 仗亳亰仆舒从 仗亠仆仂亳 仂仗亠舒亳亳 舒仆仂于从亳 亰仆舒亠仆亳 仂仄舒仆舒 仆舒 仂于仆亠 仗仂亠仂舒 (CPU: i486+): cmpxchg
  • 12. 亠亳仄亠于舒 CAS 亊于仍磳 舒仗仗舒舒仆仄 仗亳仄亳亳于仂仄 仂亰仄仂亢仆仂 仗仂亟仂仍亢亠仆亳 亰舒于舒舒 仗亳仄亳亳于舒 弍亠亰 仂弍磶舒亠仍仆仂亞仂 仗亠亠仂亟舒 于 亠亢亳仄 束仂亢亳亟舒仆亳晛 亠仆亠 于亠仂仆仂 于仂亰仆亳从仆仂于亠仆亳 弍仍仂从亳仂于从亳 亳亰-亰舒 弍仂仍亠亠 仄亠仍从仂亶 仂仗亠舒亳亳 仂仍亠亠 弍舒 (仗舒于亟舒 仆亠 于 仍仂于亳 亢从仂亶 从仂仆从亠仆亳亳)
  • 15. ム亠从 舒 仗亳仄亠亠 boost:舒 仗亳仄亠亠 boost: mutex recursive_mutex timed_mutex recursive_timed_mutex shared_mutex spin_mutex
  • 16. 舒仄从亳 lock_guard unique_lock shared_lock upgrade_lock upgrade_to_unique_lock
  • 17. lock_guard 舒于舒 于 从仂仆从仂亠 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于 舒于舒: void lock(); 于仂弍仂亟亳: void unlock();
  • 18. unique_lock 丐仂 亢亠, 仂 lock_guard + 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于 仂仗舒 亰舒于舒亳: bool try_lock(); 舒于舒 仂亞舒仆亳亠仆亳亠仄: void timed_lock(...); + 仂仗仂仍仆亳亠仍仆亠 仆从亳亳 仗仂仍亠仆亳 仄ム亠从舒, 仗仂于亠从亳 束亰舒于舒亠仆仆仂亳損...
  • 19. shared_lock 亠亟仆舒亰仆舒亠仆亳 亟仍 舒弍仂 shared_mutex 舒于舒 仆舒 亠仆亳亠 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于 舒于舒: void [timed_]lock_shared(); 于仂弍仂亟亳: void unlock_shared();
  • 20. upgrade_lock 亠亟仆舒亰仆舒亠仆亳 亟仍 舒弍仂 shared_mutex 舒于舒 仆舒 亠仆亳亠 于仂亰仄仂亢仆仂 束亟仂亰舒于舒舒損 仆舒 亰舒仗亳 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于 舒于舒: void lock_upgrade(); 于仂弍仂亟亳: void unlock_upgrade();
  • 21. upgrade_to_unique_lock 亠亟仆舒亰仆舒亠仆亳 亟仍 舒弍仂 upgrade_lock 舒于舒 仆舒 亰舒仗亳 仗仂仍亠 亰舒于舒舒 仆舒 亠仆亳亠 于仂弍仂亢亟亠仆亳亠 于 亟亠从仂亠 仗仂仍亰ム 仄亠仂亟 仄ム亠从仂于 舒于舒: void unlock_upgrade_and_lock(); 于仂弍仂亟亳: void unlock_and_lock_upgrade();
  • 22. 亳仄亠仆亠仆亳亠 亰舒仄从仂于 ム亠从 亳仄亠亠 于仂亶 typedef 仆舒 scoped_lock: mutex: typedef unique_lock<mutex> scoped_lock; recursive_mutex: typedef unique_lock<recursive_mutex> scoped_lock; timed_mutex: typedef unique_lock<timed_mutex> scoped_timed_lock; typedef scoped_timed_lock scoped_lock; 丕亟仂弍仆亠亠 亰舒于舒于舒: boost::mutex::scoped_lock l(m);
  • 23. Futex Futex - 'Fast Userspace muTexes' 亳仄亠仆ム 亟仍 亠舒仍亳亰舒亳亳 POSIX mutex 仂仗亠仆 磲舒 2.5.40 亠舒仍亳亰舒亳亳 亳仗仂仍亰亠 CAS 仗仂亳 于亠 仂仗亠舒亳亳 仗仂于仂亟 于 仗仂舒仆于亠 仗仂仍亰仂于舒亠仍
  • 24. 亠舒仍亳亰舒亳 futex 174 static void 175 futexunlock(Lock *l) 176 { 177 uint32 v; 178 179 v = runtime揃xchg(&l->key, MUTEX_UNLOCKED); 180 if(v == MUTEX_UNLOCKED) 181 runtime揃throw("unlock of unlocked lock"); 182 if(v == MUTEX_SLEEPING) 183 futexwakeup(&l->key, 1); 184 }
  • 25. 亳亳亠从舒 亠从亳 舒亰仆亳舒 仄ム亠从仂仄 于仂 仄仆仂亞仂仄 亠仄亳仆仂仍仂亞亳亠从舒 亳亳亠从舒 亠从亳 仆亠 仂弍亠从 磲舒 弌 仗仂仍亰仂于舒仆亳亠 舒仆舒仍仂亞亳仆舒 pthread_mutex_t InitializeCriticalSection ::EnterCriticalSection(&m_lock); ::LeaveCriticalSection(&m_lock); 仍 亟仂弍于舒 舒从亢亠 从舒从 亳 仄ム亠从舒仄亳 亳仗仂仍亰ム 亰舒仄从亳: CScopeLock...
  • 26. Interlocked-仆从亳亳 丐仂亢亠 舒弍仂舒ム 于 仗仂舒仆于亠 仗仂仍亰仂于舒亠仍, 仆亠 仗亠亠于仂亟 仗仂亠 于 亠亢亳仄 仂亢亳亟舒仆亳, 舒从 从舒从 仂仆仂于舒仆 仆舒 CAS-仂仗亠舒亳 亳仄亠: InterlockedIncrement(&var) InterlockedExchange InterlockedCompareExchange ...
  • 27. 舒亠于 亟仍 N 仗仂仂从仂于 #define SYNC_MAX_COUNT 10 void SynchronizationPoint() { static mutex_t sync_lock = PTHREAD_MUTEX_INITIALIZER; static cond_t sync_cond = PTHREAD_COND_INITIALIZER; static int sync_count = 0; /* 弍仍仂从亳仂于从舒 亟仂仗舒 从 亠亳从 */ pthread_mutex_lock(&sync_lock); sync_count++; /* 仗仂于亠从舒: 仍亠亟亠 仍亳 仗仂亟仂仍亢舒 仂亢亳亟舒仆亳亠 */ if (sync_count < SYNC_MAX_COUNT) pthread_cond_wait(&sync_cond, &sync_lock); else /* 仂仗仂于亠亳 仂 亟仂亳亢亠仆亳亳 亟舒仆仆仂亶 仂从亳 于亠仄亳 */ pthread_cond_broadcast(&sync_cond); /* 舒从亳于亳亰舒亳 于亰舒亳仄仆仂亶 弍仍仂从亳仂于从亳 - 于 仗仂亳于仆仂仄 仍舒亠 亳亰 仗仂亠亟 仄仂亢亠 于亶亳 仂仍从仂 仂亟仆舒 仆亳! */ pthread_mutex_unlock(&sync_lock); }
  • 28. 丕仍仂于仆亠 仗亠亠仄亠仆仆亠 亢仆 从舒从 仄亠舒仆亳亰仄 于亰舒亳仄仂亟亠亶于亳 仗仂仂从仂于, 于 仂仍亳亳亠 仂 仄ム亠从仂于 亠亞亟舒 亳仗仂仍亰亠 仄ム亠从仂仄 亠亟仆舒亰仆舒亠仆舒 亟仍 于亠亟仂仄仍亠仆亳 仂弍亳亳 仂仄舒仆仂 仂于仂弍仂亢亟舒亠 仄ム亠从 仗亳 wait() 丱仂仂仂 仗仂亟仂亟亳 亟仍 亰舒亟舒 亳仗舒 束仗仂亳亰于仂亟亳亠仍-仗仂亠弍亳亠仍損 仍 boost: boost::condition
  • 29. POSIX condition variable 丐亳仗: pthread_cond_t 亳亰仆: 亳仆亳亳舒仍亳亰舒亳:亳仆亳亳舒仍亳亰舒亳: pthread_cond_init 亳仍亳 PTHREAD_C OND_INITIALIZER 仂亢亳亟舒仆亳亠仂亢亳亟舒仆亳亠 pthread_cond_wait 亳仍亳 pthread_cond_timedwait 亳亞仆舒仍亳亰舒亳:亳亞仆舒仍亳亰舒亳: pthread_cond_signal 亳仍亳 pthread_cond_broadcast 舒亰亠仆亳亠:舒亰亠仆亳亠: pthread_cond_destroy
  • 30. 亳仄亠 亳仗仂仍亰仂于舒仆亳 public void prepareData() { synchronized (monitor) { System.out.println("Data prepared"); ready = true; monitor.notifyAll(); } } public void sendData() { synchronized (monitor) { System.out.println("Waiting for data..."); while (!ready) { try { monitor.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Sending data..."); } }