Ai đó có thể đưa ra một ví dụ về cách bế tắc chuỗi có thể được gây ra bằng ngôn ngữ C#?Ví dụ về khóa bế tắc trong C#
Trả lời
static object object1 = new object();
static object object2 = new object();
public static void ObliviousFunction()
{
lock (object1)
{
Thread.Sleep(1000); // Wait for the blind to lead
lock (object2)
{
}
}
}
public static void BlindFunction()
{
lock (object2)
{
Thread.Sleep(1000); // Wait for oblivion
lock (object1)
{
}
}
}
static void Main()
{
Thread thread1 = new Thread((ThreadStart)ObliviousFunction);
Thread therad2 = new Thread((ThreadStart)BlindFunction);
thread1.Start();
thread2.Start();
while (true)
{
// Stare at the two threads in deadlock.
}
}
+1, tôi đã đến câu hỏi này để mô tả một cái gì đó như thế này. Thứ tự mua lại khóa là một mối quan tâm rất phổ biến trong thực tế. Quy tắc của ngón tay cái: nếu bạn cần có 2 ổ khóa được giữ cùng một lúc, chúng sẽ được mua và phát hành theo thứ tự có thể dự đoán và nhất quán. – asveikau
Ở đầu kia của quy mô, bối cảnh đồng bộ hóa riêng biệt mời sự bế tắc. Dưới đây là một ví dụ:
[Synchronization]
public class Deadlock : ContextBoundObject {
public DeadLock Other;
public void Demo() { Thread.Sleep (1000); Other.Hello(); }
void Hello() { Console.WriteLine ("hello"); }
}
public class Test {
static void Main() {
Deadlock dead1 = new Deadlock();
Deadlock dead2 = new Deadlock();
dead1.Other = dead2;
dead2.Other = dead1;
new Thread (dead1.Demo).Start();
dead2.Demo();
}
Bởi vì mỗi thể hiện của Deadlock là tạo trong vòng thử nghiệm - một lớp không đồng bộ - mỗi trường hợp sẽ được tự đồng bộ hóa ngữ cảnh của nó, và do đó, khóa riêng của mình. Khi hai đối tượng gọi nhau, nó không mất nhiều thời gian cho bế tắc xảy ra (một giây, chính xác!) Vấn đề sẽ đặc biệt là ngớ ngẩn nếu khóa chết và kiểm tra lớp học được viết bởi khác nhau nhóm lập trình. Có thể là không hợp lý để mong đợi những người chịu trách nhiệm về lớp Kiểm tra là thậm chí còn biết về sự vi phạm của họ, hãy để một mình biết cách giải quyết nó. Điều này trái ngược với các khóa rõ ràng , trong đó deadlock thường là rõ ràng hơn.
- 1. Bế tắc bế tắc
- 2. Ví dụ về ngôn ngữ quy tắc dựa trên C#?
- 3. Ví dụ về khóa Android 4.3
- 4. Lo ngại về sự bế tắc với C# StreamReader
- 5. Ví dụ về Liên minh trong C
- 6. Ví dụ về Deadlock đơn giản
- 7. Khi nào là bế tắc không phải là bế tắc?
- 8. Ví dụ về mã hóa tệp BouncyCastle PGP trong C#
- 9. Ví dụ về Winsock?
- 10. Delphi threads bế tắc
- 11. Ví dụ về DDD .NET
- 12. Ví dụ và mẹo về Crypto API của Window C/C++ Ví dụ và mẹo
- 13. java VirtualMachine.getSystemProperties() bế tắc
- 14. Ví dụ về JGraphT
- 15. Ví dụ về MultiSelectListPreference
- 16. Ví dụ về D.ccurl
- 17. Ví dụ về pysmb
- 18. Trace một bế tắc trong Ruby
- 19. Ví dụ về thử nghiệm đơn vị trong C#?
- 20. Ví dụ về nhiệm vụ "này" trong C# là gì?
- 21. CreateProcessWithTokenW - Ví dụ về cách sử dụng trong C#
- 22. Ví dụ về "hiện đại C++" trong hành động?
- 23. C# Ví dụ về mã hóa AES256 bằng System.Security.Cryptography.Aes
- 24. Ví dụ về giao diện C với thư viện C++?
- 25. Bế tắc trong Ruby tham gia()
- 26. Ví dụ về nguyên tắc về trách nhiệm duy nhất là gì?
- 27. Ví dụ về các ví dụ điển hình
- 28. Snap Haskell: Ví dụ về phiên
- 29. Bế tắc trong mã đồng thời.futures
- 30. Ví dụ này về việc sử dụng từ khóa C++ 'tường minh' có chính xác không?
Đây có phải là bài tập về nhà không? –
Anh ấy không gắn thẻ nó làm bài tập về nhà. – zgnilec