Chủ Nhật, Tháng Mười 24, 2021
Trang chủKiến ThứcHỏi ĐápMột Mutex Là Gì - Chi Tiết Bài Học Giải Pháp Mutex...

Một Mutex Là Gì – Chi Tiết Bài Học Giải Pháp Mutex Lock

Tôi không biết có phải chỉ tôi không, nhưng vì một số lý do, các bài viết trên Wikipedia chỉ tốt khi bạn đã biết chủ đề. Nếu một vài năm trước, tôi mở bài báo trên Wikipedia về mutex để tìm hiểu về nó, tôi có thể có cùng một mức độ hiểu biết cộng với cảm giác rằng tất cả đều rất phức tạp và có lẽ tôi nên làm việc khác.

Đang xem: Mutex là gì

Một định nghĩa chính thức không phải là một cách tốt để học một khái niệm mới. Sẽ tốt hơn nhiều nếu có một hình minh họa mặc dù nó chắc chắn sẽ không chính xác bằng cách nào đó. Nhưng không phải mọi hình minh họa đều tốt.

Mutex

Lấy ví dụ như mutex. Cách tốt để minh họa khái niệm mutex là gì? À, nó còn được gọi là khóa , vì vậy: khóa xe đạp.

*
Một Mutex Là Gì - Chi Tiết Bài Học Giải Pháp Mutex Lock 5

Mutex còn được gọi là “khóa”

Nó là một minh họa tốt? Hãy cùng đọc định nghĩa vấn đề trên Wikipedia và xem liệu hình ảnh về một ổ khóa có giúp chúng ta hiểu được điều gì đang xảy ra hay không:

Vấn đề loại trừ lẫn nhau giải quyết là vấn đề chia sẻ tài nguyên: làm thế nào một hệ thống phần mềm có thể kiểm soát quyền truy cập của nhiều quy trình vào tài nguyên dùng chung, khi mỗi quy trình cần kiểm soát độc quyền tài nguyên đó trong khi thực hiện công việc của nó? Giải pháp loại trừ lẫn nhau cho điều này làm cho tài nguyên được chia sẻ chỉ khả dụng trong khi quy trình nằm trong một đoạn mã cụ thể được gọi là phần quan trọng . Nó kiểm soát quyền truy cập vào tài nguyên được chia sẻ bằng cách kiểm soát mỗi lần thực thi lẫn nhau của phần chương trình của nó nơi tài nguyên sẽ được sử dụng.

Ok, có điều gì đó về quyền truy cập và khóa giúp hạn chế quyền truy cập, nhưng đó là về tài nguyên được chia sẻ. Khóa xe đạp được sử dụng để bảo vệ xe đạp của bạn và chắc chắn nhất, bạn không thể sử dụng khóa để có quyền kiểm soát độc quyền tài nguyên đó . Ngoài ra, đó là gì về phần quan trọng ?

Có một thứ khác trong thế giới thực mô tả mutex tốt hơn nhiều: phòng vệ sinh trong quán cà phê.

*
Một Mutex Là Gì - Chi Tiết Bài Học Giải Pháp Mutex Lock 6

Ảnh của Patchanu Noree từ Burst

Chúng ta hãy nhìn lại đoạn Wikipedia một lần nữa:

Vấn đề loại trừ lẫn nhau giải quyết là vấn đề chia sẻ tài nguyên: làm thế nào một hệ thống phần mềm có thể kiểm soát quyền truy cập của nhiều quy trình vào tài nguyên dùng chung, khi mỗi quy trình cần kiểm soát độc quyền tài nguyên đó trong khi thực hiện công việc của nó? Giải pháp loại trừ lẫn nhau cho điều này làm cho tài nguyên được chia sẻ chỉ khả dụng trong khi quy trình nằm trong một đoạn mã cụ thể được gọi là phần quan trọng . Nó kiểm soát quyền truy cập vào tài nguyên được chia sẻ bằng cách kiểm soát mỗi lần thực thi lẫn nhau của phần chương trình của nó nơi tài nguyên sẽ được sử dụng.

Bây giờ nó có ý nghĩa hơn một chút, phải không? (ngoại trừ câu cuối cùng) Vấn đề: chúng tôi muốn chỉ một tiến trình (một người) ở trong phần quan trọng (một nhà vệ sinh) trong khi sử dụng tài nguyên chung (một nhà vệ sinh). Một mutex là một cách để giải quyết vấn đề này – chúng ta có một căn phòng chỉ có một lối vào và lối vào này có khóa. Nếu một số quá trình muốn sử dụng tài nguyên được chia sẻ , nhưng phần quan trọng bị chiếm, thì quá trình này sẽ phải đợi, có thể trong số các quá trình khác cũng cần sử dụng tài nguyên được chia sẻ đó .

Vì vậy, mutex là một ổ khóa, nhưng nó không phải là một ổ khóa. Đó là khóa cửa vào một căn phòng chỉ có một lối vào. Lưu ý rằng “chỉ một lối vào” cũng rất quan trọng – nếu không có nó, vấn đề sẽ không được giải quyết.

Vì vậy, một mutex là một nhà vệ sinh, phải không? Không hẳn. Có các biến thể.

Mutex đệ quy / reentrant

Một trong những loại mutex là mutex đệ quy / reentrant *. Nó tương tự như mutex thông thường nhưng có thêm một tính năng. Hãy thử tìm hiểu nó là gì từ Wikipedia :

Trong khoa học máy tính , mutex quay lại ( recursive mutex , khóa đệ quy ) là một loại thiết bị loại trừ lẫn nhau (mutex) cụ thể có thể bị khóa nhiều lần bởi cùng một quy trình / luồng mà không gây ra bế tắc .

Xem thêm: nightly là gì

… Có thể bị khóa nhiều lần ” – vì vậy mutex reentrant có thể sử dụng lại được còn mutex thông thường thì không. Nếu chuỗi sử dụng mutex thông thường một lần – nó sẽ không bao giờ chạm vào mutex này nữa. Đúng? Không, và bài báo làm rõ điều đó trong đoạn tiếp theo:

Mặc dù bất kỳ nỗ lực nào để thực hiện thao tác “khóa” trên mutex thông thường (khóa) sẽ không thành công hoặc bị chặn khi mutex đã bị khóa, trên mutex đệ quy, thao tác này sẽ thành công nếu và chỉ khi chuỗi khóa là chuỗi đã được giữ khoá

Chúng ta có thể sử dụng phép ẩn dụ về nhà vệ sinh của mình để xem nó nói gì về “thực hiện khóa khi đã khóa không?”

Hãy tưởng tượng cửa phòng vệ sinh là một cánh cửa được mở bằng huy hiệu. Điều gì sẽ xảy ra nếu ai đó quên huy hiệu bên trong và rời khỏi phòng vệ sinh? Một sự bế tắc. Cửa bị khóa và cần có huy hiệu để mở. Nhưng huy hiệu ở bên trong, vì vậy để có được nó, bạn nên mở khóa cửa trước (và không có huy hiệu nào khác để sử dụng thay thế vì điều đó sẽ đánh bại toàn bộ mục đích của mutex).

Ok, và khóa reentrant giải quyết vấn đề này như thế nào? Có thể ví dụ và nói, “cánh cửa sử dụng nhận dạng khuôn mặt và nếu đó là người cuối cùng sử dụng nhà vệ sinh, cửa sẽ được mở khóa,” nhưng điều đó sẽ thật nực cười. Ngoài ra, “quên mở khóa mutex” (tương đương với việc quên huy hiệu bên trong) không phải là vấn đề mà khóa reentrant giải quyết được.

Có một ví dụ hay hơn: phòng thử đồ.

*
Một Mutex Là Gì - Chi Tiết Bài Học Giải Pháp Mutex Lock 7

Phòng thử đồ (đệ quy)

Bạn đang ở trong một phòng thử đồ, và chiếc áo khoác cỡ M hóa ra giống XL hơn. Bạn để lại một số thứ của mình trong phòng, đi lấy chiếc áo khoác nhỏ hơn, và sau đó quay trở lại chính phòng thử đồ mà bạn đang sử dụng. Trong khi bạn đi, không ai có thể lấy phòng, mặc dù bạn không có ở đó.

Ở đây, một quá trình vẫn là một con người, phần quan trọng là phòng thử đồ, và tài nguyên được chia sẻ là nơi bạn có thể thay quần áo. Các mutex là điều của bạn trong phòng (cũng là phòng riêng của mình, và ước rằng bạn không thể sử dụng phòng nếu mọi thứ của một ai đó là bên trong). Đó là một mutex tái xuất hiện , vì vậy bạn có thể rời khỏi phần quan trọng bất kỳ lúc nào và sau đó quay lại phần đó sau.

Cả hai ví dụ đều là về phòng riêng, nhưng điều gì sẽ xảy ra nếu các quy trình trong chương trình của chúng tôi chỉ cần kiểm soát độc quyền trong một số thời gian?

Khóa người đọc – người viết

Có những tình huống khác nhau trong đó tài nguyên được chia sẻ là thứ mà nhiều quy trình có thể sử dụng cùng một lúc. Và đối với trường hợp sử dụng này, có một loại mutex khác được gọi là khóa độc giả – người viết . Đây là những gì Wikipedia nói về nó:

Trong khoa học máy tính , một độc giả-nhà văn ( single-nhà văn khóa, <1> một đa-reader khóa, <2> một khóa đẩy , <3> hoặc một khóa MRSW ) là một đồng bộ hóa nguyên thủy có thể giải quyết một trong những độc giả-tác giả các vấn đề . Khóa RW cho phép truy cập đồng thời cho các hoạt động chỉ đọc, trong khi các hoạt động ghi yêu cầu quyền truy cập độc quyền. Điều này có nghĩa là nhiều luồng có thể đọc dữ liệu song song nhưng cần có một khóa riêng để ghi hoặc sửa đổi dữ liệu. Khi người viết đang ghi dữ liệu, tất cả người viết hoặc người đọc khác sẽ bị chặn cho đến khi người viết viết xong

Các ví dụ trước không có các vai trò người đọc và người viết khác nhau này, vì vậy hãy sử dụng một vai trò khác: màn hình hiển thị với menu quán cà phê.

*
Một Mutex Là Gì - Chi Tiết Bài Học Giải Pháp Mutex Lock 8

Chúng tôi chắc chắn không muốn mọi người đọc menu một lần, vì vậy nó được đặt trên một màn hình lớn. Hãy đến và đọc bất cứ lúc nào. Hầu như, ngoại lệ duy nhất là khi màn hình đang được cập nhật. “Trứng tráng gà Santa Fe” sẽ không có giá 1 đô la mặc dù màn hình hiển thị như vậy.

Chúng tôi cũng không muốn hai nhà văn làm việc giống nhau (họ sẽ phải phối hợp).

Trong ví dụ này, một quy trình vẫn là một người, nhưng có hai loại người: khách đến quán cà phê (độc giả) và nhân viên quán cà phê (người viết). Phần quan trọng là một màn hình và tài nguyên được chia sẻ là dữ liệu trên màn hình đó. Độc giả được chào đón để sử dụng một phần quan trọng mà không dán đoạn trừ khi có một nhà văn , và một nhà văntruy cập độc quyền cho các tài nguyên chia sẻ khi viết.

Xem thêm: Làm Chè Trôi Tàu Nóng Hổi Dẻo Thơm Hấp Dẫn, Cách Làm Bánh Trôi Tàu Ngon Đúng Vị

Xin lưu ý rằng tôi không cố gắng nói rằng một hình minh họa tốt hơn một bài viết trên Wikipedia. Chắc chắn rằng một phép ẩn dụ không thể thay thế một bài báo hay sử dụng thuật ngữ chuyên môn. Một hình ảnh minh họa là một cách tốt để bắt đầu tạo ý nghĩa của bài viết cho những người mới làm quen với chủ đề này (hoặc làm mới kiến ​​thức của họ).

Một minh họa tốt giúp bạn có được ý tưởng và sau đó khám phá xung quanh: Khóa người viết-người viết có hoạt động cho trường hợp sử dụng bộ nhớ cache, nơi chúng ta đến với tư cách là người đọc nhưng có thể cần trở thành người viết nếu không tìm thấy bản ghi chúng ta đang tìm kiếm? Làm thế nào một phòng thử đồ có thể cho thấy rằng các mutex mới nhập cảnh cần “mở khóa” bao nhiêu lần khi chúng “khóa”? Nếu mutex là một phòng vệ sinh, thì làm thế nào chúng ta có thể mô tả cấu trúc dữ liệu bản đồ đồng thời?

Và đôi khi, bạn thấy nó hoạt động dễ dàng hơn là đọc phần mô tả bằng văn bản:

Xoay chuỗi trong O (n) thời gian và O (1) không gian

* Nhiều kỹ sư giỏi coi khóa đệ quy là một phương pháp không tốt

Japanese Spanish German French Thai Portuguese Russian Vietnamese Italian Korean Turkish Indonesian Polish Hindi

RELATED ARTICLES

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

Most Popular

Recent Comments