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ố ít nguyên do, những 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 để khám phá về nó, tôi hoàn toàn có thể có cùng một mức độ hiểu biết cộng với cảm xúc rằng tổng thể đều rất phức tạp và có lẽ rằng tôi nên thao tá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ầu nó chắc như đinh sẽ không đúng chuẩn 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ì thế : khóa xe đạp điện .

*Một Mutex Là Gì – Chi Tiết Bài Học Giải Pháp Mutex Lock 6
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 yếu tố trên Wikipedia và xem liệu hình ảnh về một ổ khóa có giúp tất cả chúng ta hiểu được điều gì đang xảy ra hay không :
Vấn đề loại trừ lẫn nhau xử lý là yếu tố san sẻ tài nguyên : làm thế nào một mạng lưới hệ thống ứng dụng hoàn toàn có thể trấn áp quyền truy vấn của nhiều tiến trình vào tài nguyên dùng chung, khi mỗi tiến trình cần trấn áp độc quyền tài nguyên đó trong khi triển khai việc làm 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 san sẻ chỉ khả dụng trong khi quá trình nằm trong một đoạn mã đơn cử được gọi là phần quan trọng. Nó trấn áp quyền truy vấn vào tài nguyên được san sẻ bằng cách trấn áp 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 vấn và khóa giúp hạn chế quyền truy vấn, nhưng đó là về tài nguyên được san sẻ. Khóa xe đạp điện được sử dụng để bảo vệ xe đạp điện của bạn và chắc như đinh nhất, bạn không hề sử dụng khóa để có quyền trấn áp độ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 quốc tế thực miêu tả mutex tốt hơn nhiều : phòng vệ sinh trong quán cafe .

*Một Mutex Là Gì – Chi Tiết Bài Học Giải Pháp Mutex Lock 7
Ả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 xử lý là yếu tố san sẻ tài nguyên : làm thế nào một mạng lưới hệ thống ứng dụng hoàn toàn có thể trấn áp quyền truy vấn của nhiều quy trình tiến độ vào tài nguyên dùng chung, khi mỗi quy trình tiến độ cần trấn áp độc quyền tài nguyên đó trong khi triển khai việc làm 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 san sẻ chỉ khả dụng trong khi tiến trình nằm trong một đoạn mã đơn cử được gọi là phần quan trọng. Nó trấn áp quyền truy vấn vào tài nguyên được san sẻ bằng cách trấn áp 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 ít, phải không ? ( ngoại trừ câu sau cuối ) 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 Tolet ) trong khi sử dụng tài nguyên chung ( một Tolet ). Một mutex là một cách để xử lý yếu tố này – tất cả 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ố ít quy trình muốn sử dụng tài nguyên được san sẻ, nhưng phần quan trọng bị chiếm, thì quy trình này sẽ phải đợi, hoàn toàn có thể trong số những quy trình khác cũng cần sử dụng tài nguyên được san 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ó, yếu tố sẽ không được xử lý .
Vì vậy, một mutex là một Tolet, phải không ? Không hẳn. Có những biến thể .
Mutex đệ quy / reentrant
Một trong những loại mutex là mutex đệ quy / reentrant *. Nó tựa như như mutex thường thì nhưng có thêm một tính năng. Hãy thử khám phá 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 ” – thế cho nên mutex reentrant hoàn toàn có thể sử dụng lại được còn mutex thường thì thì không. Nếu chuỗi sử dụng mutex thường thì một lần – nó sẽ không khi nào 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 thi thao tác “ khóa ” trên mutex thường thì ( khóa ) sẽ không thành công xuất sắc hoặc bị chặn khi mutex đã bị khóa, trên mutex đệ quy, thao tác này sẽ thành công xuất sắc 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, thế cho nên để 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 sửa chữa thay thế vì điều đó sẽ vượt mặt hàng loạt mục tiêu của mutex ) .
Ok, và khóa reentrant xử lý yếu tố 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 ở đầu cuối sử dụng Tolet, 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 tự với việc quên huy hiệu bên trong ) không phải là yếu tố mà khóa reentrant xử lý đượ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 8
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 1 số ít 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 hoàn toàn có thể lấy phòng, mặc dầu bạn không có ở đó .
Ở đây, một quy 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 san sẻ là nơi bạn hoàn toà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 hề 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ì thế bạn hoàn toàn có thể rời khỏi phần quan trọng bất kể khi 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 những quy trình tiến độ trong chương trình của chúng tôi chỉ cần trấn áp độc quyền trong một số ít thời hạn ?
Khóa người đọc – người viết
Có những trường hợp khác nhau trong đó tài nguyên được san sẻ là thứ mà nhiều quy trình tiến độ hoàn toàn có thể sử dụng cùng một lúc. Và so 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 fan hâm mộ – 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ó những vai trò người đọc và người viết khác nhau này, vì thế hãy sử dụng một vai trò khác : màn hình hiển thị hiển thị với menu quán cafe .

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

Chúng tôi chắc như đinh không muốn mọi người đọc menu một lần, thế cho nên nó được đặt trên một màn hình hiển thị lớn. Hãy đến và đọc bất kỳ khi nào. Hầu như, ngoại lệ duy nhất là khi màn hình hiển thị đang được update. “ Trứng tráng gà Santa Fe ” sẽ không có giá 1 đô la mặc dầu màn hình hiển thị hiển thị như vậy .
Chúng tôi cũng không muốn hai nhà văn thao tác giống nhau ( họ sẽ phải phối hợp ) .
Trong ví dụ này, một tiến trình vẫn là một người, nhưng có hai loại người : khách đến quán cafe ( fan hâm mộ ) và nhân viên cấp dưới quán cafe ( người viết ). Phần quan trọng là một màn hình hiển thị và tài nguyên được san sẻ là tài liệu trên màn hình hiển thị đó. Độc giả được nghênh đó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ăn có truy vấn độc quyền cho những tài nguyên san 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 quan tâm rằng tôi không cố gắng nỗ lực 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 hề thay thế sửa chữa một bài báo hay sử dụng thuật ngữ trình độ. Một hình ảnh minh họa là một cách tốt để khởi đầ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 sáng tạo độc đáo và sau đó mày mò xung quanh : Khóa người viết-người viết có hoạt động giải trí cho trường hợp sử dụng bộ nhớ cache, nơi tất cả chúng ta đến với tư cách là người đọc nhưng hoàn toàn có thể cần trở thành người viết nếu không tìm thấy bản ghi tất cả chúng ta đang tìm kiếm ? Làm thế nào một phòng thử đồ hoàn toàn có thể cho thấy rằng những mutex mới nhập cư 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 tất cả chúng ta hoàn toàn có thể diễn đạt cấu trúc tài liệu map đồ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 hạn và O ( 1 ) khoảng trống
* Nhiều kỹ sư giỏi coi khóa đệ quy là một chiêu thức không tốt
Japanese Spanish German French Thai Portuguese Russian Vietnamese Italian Korean Turkish Indonesian Polish Hindi