Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

thread linux c++ blokowanie wspólnej zmiennej

Ostatnio zmodyfikowano 2017-12-04 07:59
Autor Wiadomość
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
C/C++
#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





P-167507
DejaVu
» 2017-12-03 20:28:29
Uzyj C++11 np. std::thread, std::atomic/ std::mutex. Latwiej, przenosne rozwiazanie i nowoczesniej.
P-167509
mokrowski
» 2017-12-03 21:02:00
C/C++
#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;
}
P-167510
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.
P-167513
« 1 »
  Strona 1 z 1