pthread_mutex_unlock(&mutex);
}
}
main() {
printf(
"ΠΠ°ΡΠ°Π»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΌ...\n");
// Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΡΠΎΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
pthread_create(NULL, NULL, producer, NULL);
pthread_create(NULL, NULL, consumer, NULL);
// ΠΠ°ΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ
sleep(20);
}
ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΡΠ»ΠΈΡΠΈΡΠΌΠΈ (ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² printf(), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ main(), ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ!) ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠΎΡΠ°Π΅ΡΡΡ Π² Π³Π»Π°Π·Π°, β Π·Π΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , pthread_cond_t. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ; ΠΌΡ Π½Π°Π·Π²Π°Π»ΠΈ Π½Π°ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ condvar.
Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅, ΡΡΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ°, β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° Β«ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΒ» ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ. ΠΡ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_sleepon_lock() ΠΈ pthread_sleepon_unlock() Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΡΡΠ΅ΠΊΡ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ (pthread_mutex_lock() ΠΈ pthread_mutex_unlock()). Π€ΡΠ½ΠΊΡΠΈΡ pthread_sleepon_wait() Π±ΡΠ»Π° Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ pthread_cond_wait().
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ Π·Π΄Π΅ΡΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΆΠ΄ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠΊΡΡΡΡΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΡΡΠ΅ΠΊΡ, Π° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΡΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠ²Π½ΠΎ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π°Π΅Ρ Π½Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ.
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ pthread_cond_signal() Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_sleepon_signal() (ΠΎΠΏΡΡΡ ΠΆΠ΅, Ρ ΡΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΌΡΡΠ΅ΠΊΡΠ°).
Π€ΡΠ½ΠΊΡΠΈΠΈ phtread*_signal() ΠΈ pthread*_broadcast()Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΎ ΠΆΠ΄ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°Ρ ΠΌΡ ΠΎΠ±Π΅ΡΠ°Π»ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ pthread_sleepon_broadcast() ΠΈ pthread_sleepon_signal(). ΠΠ°ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΈ ΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ: pthread_cond_signal() ΠΈ pthread_cond_broadcast().
Π Π΄Π²ΡΡ ΡΠ»ΠΎΠ²Π°Ρ , ΡΡΠ½ΠΊΡΠΈΡ Π² Π²Π°ΡΠΈΠ°Π½ΡΠ΅ Β«signalΒ» ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π±Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Β«waitΒ», ΠΈ Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ·Π²Π°Π» Π±Ρ ΡΡΠ½ΠΊΡΠΈΡ pthread*_signal(), ΡΠΎ Π±ΡΠ» Π±Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΆΠ΄ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΎΡΠΎΡΡΠΉ ΠΈΠ· Π½ΠΈΡ ? Π’ΠΎΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΠΈΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. ΠΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, ΠΏΠΎΡΡΠ΄ΠΎΠΊ Β«ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΡΒ» Π±ΡΠ΄Π΅Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΆΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠ° pthread*_broadcast() ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ ΡΡΠΎ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ Π²ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ.
Π Π°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠΌ. ΠΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ (ΠΏΡΠΈΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΡΠΌΠ°ΡΡ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΆΠ΄ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΊΠ°ΠΊ Ρ Π½Π°Ρ ΠΈ Π±ΡΠ»ΠΎ Π²ΠΎ Π²ΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ Β«ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΒ», ΡΡΠ½ΠΊΡΠΈΡ pthread*_signal() ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠΏΡΠ°Π²ΠΈΡΡΡ β Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ, ΠΈ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅Ρ).
Π ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΡΡΠ½ΠΈΡΡ: Π° ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ ΠΆΠ΄ΡΡ? ΠΠ±ΡΡΠ½ΠΎ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π΅ΡΡΡ Π΄Π²Π° ΠΎΡΠ²Π΅ΡΠ°:
β’ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ ΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΏΡΠ» Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°;
β’ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ, ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΆΠ΄Π΅Ρ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ.
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅, ΡΡΠΎ ΠΊΠΎΠ΄ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
/*
* cv1.c
*/
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex_data = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cv_data = PTHREAD_COND_INITIALIZER;
int data;
thread1() {
for (;;) {
pthread_mutex_lock(&mutex_data);
while (data == 0) {
pthread_cond_wait(&cv_data, &mutex_data);
}
// Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ
pthread_mutex_unlock(&mutex_data);
}
}
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡ Π΄Π°Π½Π½ΡΠ΅ β Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎΠ±Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π» Π½Π°Π΄ ΡΡΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π½ΠΈΠΆΠ΅, Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ-ΠΈΠ½ΠΎΠΌΡ:
/*
* cv2.c
*/
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex_xy = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cv_xy = PTHREAD_COND_INITIALIZER;
int x, y;
int isprime(int);
thread1() {
for (;;) {
pthread_mutex_lock(&mutex_xy);
while ((x > 7) && (y != 15)) {
pthread_cond_wait(&cv_xy, &mutex_xy);
}
// Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ
pthread_mutex_unlock(&mutex_xy);
}
}
thread2() {
for (;;) {
pthread_mutex_lock(&mutex_xy);
while (!isprime(x)) {
pthread_cond_wait(&cv_xy, &mutex_xy);
}
// Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ
pthread_mutex_unlock(&smutex_xy);
}
}
thread3() {
for (;;) {
pthread_mutex_lock(&mutex_xy);
while (x != y) {
pthread_cond_wait(&cv_xy, &mutex_xy);
}
// Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ
pthread_mutex_unlock(&mutex_xy);
}
}
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π°ΡΡ! ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΎΠ±ΡΠ·Π°Π½Ρ Β«ΡΠ°Π·Π±ΡΠ΄ΠΈΡΡΒ» Π²ΡΠ΅ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ» ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ.
ΠΡΠΎ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π²ΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π° Π½Π°Ρ Π²ΠΎΠΏΡΠΎΡ Β«Π° ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ ΠΆΠ΄ΡΡ?Β» Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ΅ ΠΆΠ΄ΡΡ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ (ΠΏΠΎΡΠΎΠΊ thread1() ΠΆΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ x Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ 7, ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π½ΡΠΌ 15, ΠΏΠΎΡΠΎΠΊ thread2() ΠΆΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ x Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ, Π° ΠΏΠΎΡΠΎΠΊ thread3() ΠΆΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° x Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΠ°Π²Π½ΡΠΌ Ρ), Ρ Π½Π°Ρ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²ΡΠ±ΠΎΡΠ°, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Β«ΡΠ°Π·Π±ΡΠ΄ΠΈΡΡΒ» Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Β«ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΒ».
ΠΠ΄ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΡΡΠ»ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈΠΠ΄ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΡΡΠ»ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π²Ρ Π±Ρ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π»ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ β Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π²Π°Ρ Π±ΡΠ»ΠΎ M ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π²Ρ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π±Ρ M ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΆΠ΅ ΠΆΠ΄ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° M ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ N Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Ρ Π²Π°Ρ Π±ΡΠ»ΠΎ Π±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ N, Π° Π½Π΅ M ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Ρ, ΡΠ΅ΠΌ ΠΆΠ΄ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΈ Π²ΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ:
1. ΠΠ΄ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
2. ΠΡΡΠ΅ΠΊΡΡ ΠΆΠ΄ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠΊΡΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅; ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ Π·Π°Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ ΡΠ²Π½ΠΎ.
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΡΠ½ΠΊΡ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»Π΅Π½. :-) ΠΡΠΎΡΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΠΌΠ΅Π΅Ρ Π΅ΡΠ΅ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΌΡΡΠ». ΠΠΎΠ³Π΄Π° ΠΌΡΡΠ΅ΠΊΡ ΡΠΊΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΌ ΡΠ°ΠΊΡΠΎΡΠΎΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ½ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½-Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΡΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π²ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΡΠΌ ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ!
ΠΠ°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΡΡΠ°Ρ ΡΡ Π΅ΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΡΡΠ΅ΠΊΡΠΎΠ² β ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ β ΠΈ ΡΠ²Π½ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠΌ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΠΊ ΠΌΠΎΡΡ, ΡΠ°ΠΊ ΠΈ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½ΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π½ΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, ΠΈ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ°ΠΌΠΈΠΌ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π°:
β’ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΌΡΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ;
β’ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΌΡΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ;
β’ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΌΡΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π΄Π°Π½Π½ΡΡ ).
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ β Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΌΡΡΠ΅ΠΊΡΡ Π² ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΡΡΠΊΡΡΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ Ρ.Π΄.). Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π²Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ, Π²ΡΠΎΡΠΎΠΉ, ΠΈΠ»ΠΈ ΠΎΠ±Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°, Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΈ ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ»ΡΡΠ΅Π²ΡΠΌΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ:
1. ΠΡΡΠ΅ΠΊΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
2. Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Β«ΡΠΎΡΠΊΠΈ Π²ΡΡΡΠ΅ΡΠΈΒ».