Если у меня есть 2 потока Thread1 и Thread2, но Thread2 будет использовать некоторые данные, которые обрабатываются, когда Thread1 заканчивается. Есть ли способ Thread2 дождаться завершения Thread1, а затем получить данные?Проблема с posix threads C++
ответ
Если вам нужны данные thread1, а не только простой блокировки для предотвращения одновременного доступа, то вы должны использовать семафор :
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_post(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
int sem_destroy(sem_t *sem);
Основная программа запускает sem_init перед запуском потоков. В потоке 1 выполняется sem_post, чтобы указать, что это сделано. В Thread 2 используется sem_wait, чтобы гарантировать, что Thread 1 будет завершен до его запуска.
Это называется мьютексом. pthreads вызывает pthread_mutex, вы должны найти их в документах.
Да, вы можете использовать мьютекс «охранником» данные в вопросе:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *abs_timeout);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
Я знаю о мьютексе, но я не знаю, как их использовать в моем случае. Трейдер1 обрабатывает класс с 2 статическими данными, а thread2 должен использовать статические данные thoose. Класс :: data1, Class :: data2, я знаю, чтобы использовать мьютекс только при доступе к тем же данным в одном потоке. Мой Thread2 получает данные, используя функции get из thread1 – Kobe
Один из способов заключается в использовании условие ВАР: Ex:
pthread_mutex_t mx;
pthead_cond_t cond;
void first_f(void *) {
...
pthread_mutex_lock(&mx)
// do something in first function
// the second function is waiting
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mx);
}
return NULL;
}
void second_f(void *) {
...
pthread_mutex_lock(&mx)
pthread_cond_wait(&cond, &mx);
// waiting for first function until we catch a signal
pthread_mutex_unlock(&mx);
}
return NULL;
}
Второй способ заключается в использовании двух семафоров. Первые слагает в 1, второй - в ноль. Когда первая функция заканчивается, она устанавливает первый сэмпл равным 0, а второй sem - 1. Вторая функция ждет, пока второй семафор не будет установлен на 1 по первой функции и не будет работать.
- 1. POSIX Threads с языка C
- 2. c minimax using posix threads
- 3. Сфера применения POSIX Threads
- 4. posix threads описание программы?
- 5. Понимание POSIX Threads
- 6. Posix threads и priority
- 7. Posix Threads with Mutex
- 8. Проблема с потоками Posix
- 9. POSIX Threads на многопроцессорной системе
- 10. Самостоятельные против объединяемого POSIX Threads
- 11. Posix threads, child возвращает ошибку
- 12. std :: thread, posix threads и win32 threads в MinGW-W64
- 13. C# Threads - проблема с родительским доступом
- 14. POSIX C Threads. Пример Mutex. Не работает должным образом
- 15. POSIX C Threads. Пример pthread_cond_t. Не работает должным образом
- 16. Проблема с аргументами потока Posix (C)
- 17. Проблема с модулем POSIX
- 18. Проблема с подпрограммой POSIX.
- 19. Как сделать thread2 ждать thread1 in c using posix-threads
- 20. pthread (POSIX Threads) в visual studio 2010
- 21. POSIX проблема с MinGW (sem_timedwait)
- 22. Как реализовать блокировки чтения с использованием POSIX Threads
- 23. Проблема с базовой программой с использованием Boost Threads в C++
- 24. posix pthreads in c
- 25. POSIX потоки в C
- 26. Проблема с динамическим строковым массивом Linux POSIX C
- 27. C# Mysql threads
- 28. Threads stop working C++
- 29. Проблема с синхронизацией потоков POSIX и/или аргументом pthread_create()
- 30. Проблема с Threads в проекте MFC
aaa да, это то, что мне нужно, отлично, много thnaks – Kobe