Làm thế nào để bạn thực hiện khóa quá trình chéo trong Linux (C / C ++)?


8

Tôi cần đảm bảo rằng một tiến trình chỉ thực hiện trong một trường hợp tại một thời điểm. Trên Windows, bạn có thể sử dụng mutex có tên. Nhưng tôi không biết nên dùng gì trên Linux.

Tôi nghĩ rằng tôi đã thấy một cách tiếp cận là ứng dụng tạo một tệp độc quyền, nhưng tôi không thể tìm thấy nó nữa. Bạn có sử dụng các chức năng tập tin thường xuyên, vòng lặp bận rộn?


2
Xem nếu được giúp đỡ: stackoverflow.com/questions/5339200/ Cách
enzotib

Có một cuộc gọi đầu tiên đến fopen sẽ cố gắng ghi đè lên một tệp có thể bị khóa, điều này có ổn không?
Coder

Nó được giải thích trong câu trả lời: có vẻ là ok.
enzotib

Đừng lo lắng, bỏ phiếu cho câu trả lời.
enzotib

Câu trả lời:


9

Nếu bạn chỉ muốn một phiên bản ứng dụng của mình chạy, bạn có thể sử dụng tệp khóa. Mở nó bằng O_CREAT|O_EXCLcờ và nó sẽ thất bại nếu tập tin đã tồn tại.

Nếu bạn muốn đồng bộ hóa quyền truy cập vào một tập tin sử dụng flock. Cũng có thể khóa các phần của tập tin với fcntl. Flock chỉ dành cho khóa tư vấn có nghĩa là một chương trình có thể bỏ qua các khóa và truy cập nó bằng mọi cách. Có thể khóa bắt buộc với fcntlnhưng nó yêu cầu tùy chọn gắn kết đặc biệt và quyền truy cập tệp đặc biệt.

semgetsemopcó thể được sử dụng để đồng bộ hóa quá trình.


0

Các mutex của quy trình là một phần tùy chọn của POSIX (xem _POSIX_THREAD_PROCESS_SHARED trên trang unistd.h ) và khi chúng được triển khai trên Linux, bạn cũng có thể sử dụng chúng - xem các ví dụ .


Vấn đề ở đây là có các đột biến trên các quy trình. Đây có phải là một phần của POSIX không?
Alfe

Vâng, đó là một trong một số cơ chế Posix IPC. Đó là viết tắt của truyền thông liên tiến trình, vì vậy toàn bộ ý tưởng là giao tiếp giữa các quá trình. cái này có vẻ khá tốt: chandrashekar.info/articles/linux-system-programming/ khăn
Daniel Farrell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.