Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136

    error: expected expression before ‘{’

    Salve,compilando il codice che segue ottengo il seguente errore:
    error: expected expression before ‘{’ token
    Avete suggerimenti?Grazie.

    codice:
    #include <stdio.h>
    #include <pthread.h>
    #include <stdlib.h>
    #include <string.h>
    
    void *prod_rtn(void *);
    void *cons_rtn(void *);
    
    struct data{
    	int a;
    	pthread_mutex_t mutex;
    };
    
    int main(){
    	pthread_t prod;
    	pthread_t cons;
    	struct data *arg;
    	int err;
    
    	
    	if( (arg=(struct data*)malloc(sizeof(struct data))) == NULL){
    		perror("malloc() error");
    		exit(1);
    	}
    	arg->a=0;
    	arg->mutex=PTHREAD_MUTEX_INITIALIZER;
    
    
    	if( (err=pthread_create(&prod,NULL,prod_rtn,(void*)arg)) != 0){
    		printf("pthread_create() error %s\n",strerror(err));
    		exit(1);
    	}
    	if( (err=pthread_create(&cons,NULL,cons_rtn,(void*)arg)) != 0){
    		printf("pthread_create() error %s\n",strerror(err));
    		exit(1);
    	}
    
    	while(1){
    		if( arg->a > 10)
    			break;
    		else
    			printf("Master thread %d\n",arg->a);
    	}
    }
    
    void *prod_rtn( void* arg){
    	int err;
    	struct data *args=(struct data*)arg;
    
    	if( (err=pthread_mutex_lock(&(args->mutex))) != 0){
    		printf("pthread_mutex_lock() error %s\n",strerror(err));
    		exit(1);
    	}
    	printf("PRODUTTORE\n");
    	args->a=(args->a)+2;
    
    	if( (err=pthread_mutex_unlock(&(args->mutex))) != 0){
    		printf("pthread_mutex_lock() error %s\n",strerror(err));
    		exit(1);
    	}
    }
    
    void *cons_rtn( void* arg){
    	int err;
    	struct data *args=(struct data*)arg;
    
    	if( (err=pthread_mutex_lock(&(args->mutex))) != 0){
    		printf("pthread_mutex_lock() error %s\n",strerror(err));
    		exit(1);
    	}
    	printf("CONSUMATORE\n");
    	args->a=(args->a)+1;
    
    	if( (err=pthread_mutex_unlock(&(args->mutex))) != 0){
    		printf("pthread_mutex_lock() error %s\n",strerror(err));
    		exit(1);
    	}
    }

  2. #2
    in che riga te lo da?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: error: expected expression before ‘{’

    Originariamente inviato da and77
    Avete suggerimenti?
    Sì, due suggerimenti:

    1) Specificare il linguaggio usato, almeno nel titolo, come richiesto dal regolamento interno
    2) Riportare anche la linea sicuramente segnalata dal compilatore, dato che di parentesi graffe aperte ce ne sono parecchie.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136
    Il linguaggio e il C.Scusate per la superficialità.

    codice:
    if( (arg=(struct data*)malloc(sizeof(struct data))) == NULL){
    		perror("malloc() error");
    		exit(1);
    	}
    	arg->a=0;
    	arg->mutex=PTHREAD_MUTEX_INITIALIZER;

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non è quella la riga che viene segnalata. E' quella in cui fai l'assegnamento della macro PTHREAD_MUTEX_INITIALIZER.

    Spulciando il WEB ho trovato questo:

    http://lists.linux.org.au/archives/t.../msg00017.html

    Sostituisci l'assegnazione della macro PTHREAD_MUTEX_INITIALIZER con la chiamata alla funzione pthread_mutex_init, in questo modo:

    codice:
    // Da sostituire
    arg->mutex=PTHREAD_MUTEX_INITIALIZER;
    
    // con
    pthread_mutex_init (&(arg->mutex), NULL);
    Ci sono altri errori nel codice. Una cosa importante: hai dichiarato (correttamente) il ritorno a "int" della funzione main(), ma non hai messo il classico "return 0;" alla fine...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136
    è vero......la struttura che contiene il mutex viene allocata dinamicamente perciò c'bisogno della funzione pthread_init.Il motivo potrebbe essere questo?Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.