Salut,
petit souci de compilation. Je veux mettre en place un mutex sur un objet de communication qui est partagé par plusieurs thread. Jusque la, pas de souci. Jusqu'avant, je mettais un simple flag true/false pour gérer mes écriture concurente. Mais autant faire juste, et passer par un mutes.
Bref, je remplace le tout par un mutex, je tente, et... Ben je me récupère un segmentation fault quand je lance le programme (qui se traduit par un "No source available for "pthread_mutex_lock() " " quand je fais du debug depuis Eclipse...
Voici le code:
Et mon mutex est bien déclaré dans mon .h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 Queue::Queue() { // TODO Auto-generated constructor stub this->start_list = 0; this->end_list = 0; this->mutex = PTHREAD_MUTEX_INITIALIZER; } /** * Destructor function * @return void */ Queue::~Queue() { // TODO Auto-generated destructor stub } /** * send message function. write message on msg list * @param msg *message pointer where to insert message * @return bool Return true if finish, false if error */ bool Queue::send_msg( msg * message ){ pthread_mutex_lock (& this->mutex); int pos; if( ( this->end_list + 1 != this->start_list ) && ( ! ( ( this->end_list == MSG_NBR_MAX ) && ( this->start_list == 0 ) ) ) ) { //if(this->end_list != MSG_NBR_MAX ) pos = this->end_list; // else // pos = 0; this->list_msg[pos].cmd_id = message->cmd_id; this->list_msg[pos].urgent = message->urgent; this->list_msg[pos].lenght = message->lenght; this->list_msg[pos].sender_id = message->sender_id; for(unsigned int i = 0; i < 3; i++) this->list_msg[pos].msg_id[i] = message->msg_id[i]; for(unsigned int i = 0; i < message->lenght; i++) this->list_msg[pos].params[i] = message->params[i]; if(this->end_list != MSG_NBR_MAX - 1 ) this->end_list++; else this->end_list = 0; } pthread_mutex_unlock (& this->mutex); return true; }
L'un de vous aurait une idée? C'est vraiment au moment d'entrer dans send_msg() que je pars en segmentation fault.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class Queue { private: msg list_msg[MSG_NBR_MAX]; pthread_mutex_t mutex; int start_list; int end_list; public: Queue(); virtual ~Queue(); bool send_msg(msg * message); bool get_msg(msg * message); int get_nbr_msg(); }; #endif /* QUEUE_H_ */
Je vois pas ce que j'ai fait de faux...
Merci.
Onet
Partager