thread linux c++ blokowanie wspólnej zmiennej
Ostatnio zmodyfikowano 2017-12-04 07:59
aaadam Temat założony przez niniejszego użytkownika |
thread linux c++ blokowanie wspólnej zmiennej » 2017-12-03 19:44:25 witam, próbuje zablokować zmienną k tak aby wątek który używa funkcję print_xs nie mógłbyć wstanie jej zmienić ale jakoś nie wychodzi, ktoś pomoże ? kod oraz wyjście programu poniżej #include <stdlib.h> #include <pthread.h> #include <stdio.h> #include <unistd.h> int k;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void * print_xs( void * unused ) { for( int i = 0; i < 9; i++ ) { k = 3; sleep( 1 ); printf( "for pochodny watek : %d\n", k ); } printf( "pochodny watek : %d\n", k ); } int main() { pthread_t thread_id; pthread_create( & thread_id, NULL, print_xs, NULL ); pthread_mutex_lock( & mutex ); k = 1; sleep( 12 ); pthread_mutex_unlock( & mutex ); printf( "glowny watek : %d\n", k ); pthread_join( thread_id, NULL ); return 0; }
for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 for pochodny watek : 3 pochodny watek : 3 glowny watek : 3
|
|
DejaVu |
» 2017-12-03 20:28:29 Uzyj C++11 np. std::thread, std::atomic/ std::mutex. Latwiej, przenosne rozwiazanie i nowoczesniej. |
|
mokrowski |
» 2017-12-03 21:02:00 #include <stdlib.h> #include <pthread.h> #include <stdio.h> #include <unistd.h>
static int k;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static void * print_xs( void * unused ) { printf( "Wejście w wątek roboczy.\n" ); for( int i = 0; i < 9; ++i ) { pthread_mutex_lock( & mutex ); k = i; printf( "For w wątku: %d\n", k ); pthread_mutex_unlock( & mutex ); sleep( 1 ); } printf( "Koniec wątku: %d\n", k ); return unused = NULL; }
int main( void ) { pthread_t thread_id; pthread_create( & thread_id, NULL, & print_xs, NULL ); pthread_mutex_lock( & mutex ); k = 1; sleep( 3 ); printf( "Główny wątek w zasięgu blokady: %d\n", k ); pthread_mutex_unlock( & mutex ); pthread_join( thread_id, NULL ); printf( "Główny wątek po przyłączeniu wątku roboczego: %d\n", k ); return EXIT_SUCCESS; }
|
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-12-04 07:59:39 jeszcze mogę użyć c++ ale potem przechodzę na c i nie będę mógł :( ale dzięki za podpowiedz. |
|
« 1 » |