Tôi đang làm việc trên một chương trình đa luồng và có câu hỏi về nơi xác định mutex.C nơi để xác định một mutex trong một chương trình đa luồng?
Thông tin có liên quan: chương trình có main.c
nơi chúng tôi xác định hành động cụ thể theo đầu vào của người dùng. main gọi hàm master_function nằm trong tệp có tên master.c
. Trong tập tin master.c
chúng ta tạo ra N luồng cùng với một số hành động khác (không liên quan). Các chủ đề gọi một hàm có tên son_threads nằm trong tệp son.c
và chúng cần sử dụng mutex khi chúng nhập vào vùng quan trọng (chỉnh sửa một số biến toàn cầu để ngăn chặn tình trạng chủng tộc). Một tệp khác tôi có là một type.h
nơi tôi xác định một số biến toàn cục mà tôi cần sử dụng.
Tờ khai mutex là:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
Vì vậy, tôi đã cố gắng để xác định mutex trong tôi type.h
do đó, nó có thể nhìn thấy các son.c
tập tin. Khi tôi cố gắng biên dịch nó cho tôi lỗi. Đó là chính xác kể từ khi tôi xác định rằng mutex trong một số tập tin.
Nhưng tôi khá chắc chắn tôi không thể xác định mutex trong tệp son.c
vì mỗi khi tôi tạo chuỗi đó, mutex sẽ được khởi tạo thành cài đặt mặc định của nó, không cho phép tôi sử dụng đúng cách. Không chắc chắn về điều này.
Biến tần phải là biến toàn cục, trong đó chuỗi N có quyền truy cập vào nó. Vậy tôi phải đặt nó ở đâu?
Tôi không biết liệu tôi có thể giải thích cho bản thân mình đúng không. Cố gắng hết sức.
Ok Tôi hiểu ý của bạn là gì. Hãy để tôi xem nó hoạt động như thế nào. Cảm ơn vì lời khuyên! – Alessandroempire
Tôi không nghĩ rằng trò chơi với 'GLOBAL' phục vụ nhiều, ở đây. Bạn cần một khai báo trong tệp '.h' và định nghĩa * với khởi tạo * trong' .c'. Việc khởi tạo mặc định cho 'pthread_mutex_t' sẽ không thực hiện. –
@ JensGustedt thats chính xác những gì tôi vừa làm và nó hoạt động. Tôi không nhận thấy tôi đã khởi tạo mutex trong tệp .h. Sai lâm lơn. – Alessandroempire