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ỉ mình tôi không, nhưng vì lý do nào đó, các bài viết trên Wikipedia chỉ tốt khi bạn đã biết chủ đề này. Nếu một vài năm trước, tôi đã mở bài viết trên Wikipedia về mutex để tìm hiểu về nó, thì có lẽ tôi đã có cùng 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 một 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 hay để 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 hình minh họa nào cũng tốt.

Mutex

Lấy ví dụ về mutex. Một cách hay để minh họa khái niệm mutex là gì? À, nó cũng được gọi là Khóa vì vậy: khóa xe đạp.

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

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

Vấn đề loại trừ lẫn nhau được 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 được chia sẻ, 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 mình? 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 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 các tài nguyên được chia sẻ bằng cách kiểm soát từng lần thực thi lẫn nhau của phần chương trình 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 hạn chế quyền truy cập, nhưng đó là về tài nguyên dùng chung. Ổ khóa xe đạp được dùng để cố định chiếc xe đạp của bạn và chắc chắn nhất, bạn không thể dùng ổ khóa để lấy được độc quyền kiểm soát tài nguyên đó . Ngoài ra, nó là gì về tầm quan trọng ?

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

*

Ảnh của Patchanu Noree từ Burst

Hãy xem lại đoạn văn Wikipedia:

Vấn đề loại trừ lẫn nhau được 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 được chia sẻ, 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 mình? 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 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 các tài nguyên được chia sẻ bằng cách kiểm soát từng lần thực thi lẫn nhau của phần chương trình nơi tài nguyên sẽ được sử dụng.

Xem thêm bài viết hay:  1325 là gì? 25251325 là gì?

Bây giờ nó có ý nghĩa hơn một chút, phải không? (trừ câu cuối cùng) Vấn đề: chúng tôi chỉ muốn một quá trình (một người) đang ở trong phần tầm 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 tôi 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 vài tiến triển muốn sử dụng tài nguyên được chia sẻ nhưng một phần tầm quan trọng chiếm đóng, sau đó tiến triển Điều này sẽ phải chờ đợi, có thể trong số tiến triển 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à ổ khóa. Nó đang khóa cửa 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 – 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 cần thiết. Có những 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. Cố gắng tìm hiểu nó là gì từ Wikipedia:

Trong khoa học máy tính, mutex đã trở lại ( mutex đệ quy , khóa đệ quy ) là một loại thiết bị loại trừ lẫn nhau cụ thể (mutex) 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: hàng đêm là gì?

… Có thể khóa nhiều lần ” – vì vậy, mutex truy cập lại có thể tái sử dụng được còn mutex thông thường thì không. Nếu luồng 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 viết làm rõ điều đó trong đoạn tiếp theo:

Mặc dù mọi nỗ lực thực hiện thao tác “khóa” trên một mutex thông thường (khóa) sẽ không thành công hoặc bị chặn khi mutex đã bị khóa, nhưng trên một mutex đệ quy, thao tác sẽ thành công khi và chỉ khi móc khóa là một chuỗi đã được khóa

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

Hãy tưởng tượng cửa phòng tắm như 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 thẻ của họ bên trong và rời khỏi nhà 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 để lấy được nó, bạn phải 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ẽ làm hỏng 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ể lấy ví dụ và nói, “cửa sử dụng tính nă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ẽ không 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 truy cập lại giải quyết được.

Xem thêm bài viết hay:  Emuos Là Gì ? Emupedia Emuos Tuổi Thơ Dữ Dội

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

*

Phòng thay đồ (đệ quy)

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

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

Cả hai ví dụ đều nói về phòng riêng, nhưng nếu bước trong chương trình của chúng tôi chỉ kiểm soát độc quyền trong một thời gian?

Khóa đầu đọc – ghi

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 đầu đọc-ghi . Đây là những gì Wikipedia nói về nó:

Trong khoa học máy tính, một người đọc-người viết ( người viết đơn khóa, một nhiều đầu đọc khóa, một đẩy khóa hoặc một MRW . Khóa ) là một nguyên thủy đồng bộ hóa có thể giải quyết một trong những vấn đề của người đọc-tác giả. 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ó khóa riêng để ghi hoặc sửa đổi dữ liệu. Khi một người viết đang ghi dữ liệu, tất cả những 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ê.

*

Chúng tôi chắc chắn không muốn mọi người đọc thực đơn cùng một lúc, 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ù bản thân màn hình.

Xem thêm bài viết hay:  Ly hôn là gì? Khi nào được gọi là ly hôn thuận tình?

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

Trong ví dụ này, một thủ tục 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ê (nhà văn). Phần tầm 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ả Chào mừng bạn đến sử dụng một phần quan trọng không dán đoạn văn trừ khi có một nhà văn và một nhà văn Vâng truy cập độc quyền cho những tài nguyên được chia sẻ Khi viết.

Xem thêm: Cách Làm Chè Bánh Bao Thơm Ngon Cay Đậm, Cách Làm Bánh Bao 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, một phép ẩn dụ không thể thay thế một bài viết hay hoặc thuật ngữ kỹ thuật. Hình minh họa là một cách hay để bắt đầu hiểu ý nghĩa của bài viết đối với 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ó ý tưởng và sau đó khám phá xung quanh: Khóa người ghi-người ghi có hoạt động cho trường hợp sử dụng bộ đệm không, khi chúng tôi đế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 mà chúng tôi đang tìm kiếm? Làm thế nào một phòng thử đồ có thể chỉ ra rằng các mutex mục nhập mới cần được “mở khóa” bao nhiêu lần khi chúng bị “khóa”? Nếu mutex là một nhà 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 làm việc dễ dàng hơn là đọc mô tả bằng văn bản:

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

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

Tiếng Nhật Tiếng Tây Ban Nha Tiếng Đức Tiếng Pháp Tiếng Thái Tiếng Bồ Đào Nha Tiếng Nga Tiếng Việt Tiếng Ý Tiếng Hàn Tiếng Thổ Nhĩ Kỳ Tiếng Indonesia Tiếng Ba Lan Tiếng Hindi

Bạn thấy bài viết Một Mutex Là Gì – Chi Tiết Bài Học Giải Pháp Mutex Lock có khắc phục đươc vấn đề bạn tìm hiểu ko?, nếu ko hãy comment góp ý thêm về Một Mutex Là Gì – Chi Tiết Bài Học Giải Pháp Mutex Lock bên dưới để Trường Cao đẳng Nghề Khách sạn Du lịch Quốc tế IMPERIAL có thể thay đổi & cải thiện nội dung tốt hơn cho các bạn nhé! Cám ơn bạn đã ghé thăm Website: imperialhotelschool.edu.vn của Trường Cao đẳng Nghề Khách sạn Du lịch Quốc tế IMPERIAL

Nhớ để nguồn: Một Mutex Là Gì – Chi Tiết Bài Học Giải Pháp Mutex Lock của website imperialhotelschool.edu.vn

Chuyên mục: Là gì?

Viết một bình luận