2010-02-11 22 views

Trả lời

11

Vâng, dưới nhiều nền tảng Cột có thể đồng bộ hóa qua các quy trình. Bạn sẽ sử dụng các semaphores "có tên" cho việc này - nhiều tiến trình truy cập đối tượng thông qua một tên, tương tự như các đối tượng hệ thống tập tin.

Trong POSIX, bạn có thể tạo các semaphores có tên qua sem_open(). Đối với các ẩn dụ chưa được đặt tên, nếu tham số thứ hai là sem_init() là không đồng bộ, nó có thể là interprocess, mặc dù tôi không chắc chắn chính xác cách một semaphore interprocess chưa được đặt tên được cho là hoạt động.

Lưu ý rằng trên một số hệ thống, các chức năng này có thể bị lỗi với ENOSYS nếu các semaphor interprocess không được hỗ trợ (ví dụ OpenBSD).

Trong Windows, bạn có thể tạo các semaphores có tên qua CreateSemaphore() như @sergiom đã đề cập.

+0

Kể từ phiên bản 5.4 (tháng 11 năm 2013) OpenBSD có [tên semaphores] (http://www.openbsd.org/cgi-bin/man.cgi?query=sem_open&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format= html). Xem [bài đăng trên blog này] (http://www.tedunangst.com/flak/post/sem-open-named-semaphores) – user454322

+0

Re: "Tôi không chắc chắn chính xác cách một semaphore interprocess chưa được đặt tên được cho là hoạt động": Bạn có thể đặt semaphore trong bộ nhớ chia sẻ. Ngoài ra, nếu bạn tạo một semaphore interprocess không tên trong bộ nhớ bình thường và sau đó gọi 'fork()', bạn đã có IPC giữa các tiến trình cha và con. Trong mọi trường hợp, tất nhiên, là một semaphore vô danh có thể khám phá theo cách mà một semaphore được đặt tên là. Nhưng bạn thường chỉ cần một semaphore nếu có một số mối quan hệ khác giữa các quá trình, anyway. – ruakh

1

Các ẩn dụ POSIX có thể không được đặt tên hoặc được đặt tên. Các ẩn dụ chưa được đặt tên là được cấp phát trong bộ nhớ xử lý và được khởi tạo . Các ẩn dụ không được đặt tên có thể có thể sử dụng được bằng nhiều quá trình, tùy thuộc vào cách semaphore được phân bổ và khởi tạo như thế nào . [...]

Bạn có muốn biết more không?

1

Trên thực tế Semaphore là một công cụ đồng bộ hóa nhưng nó được tính là một IPC bcoz nó được truy cập bởi hơn 1 quá trình

0

IPC có ba sử dụng khác nhau như dữ liệu trao đổi (hàng đợi thông điệp, PIPE, FIFO), đồng bộ hóa (tập tin ổ khóa, semaphore, MUTEX) và tín hiệu.