cách chủ đề giao tiếp với nhau? họ không sử dụng giá trị của eachother, vậy thì cách giao tiếp giữa chúng là gì?cách chủ đề giao tiếp với eachother?
Trả lời
Chủ đề có thể chia sẻ các giá trị, họ chỉ cần cẩn thận khi làm như vậy. Trong. Net các phương thức phổ biến nhất là câu lệnh lock
và lớp Liên khóa.
"chúng không sử dụng giá trị của nhau" - cũng có hai luồng trong cùng một quá trình có thể xem các biến phổ biến, vì vậy đó là đánh giá mẫu. Vì vậy, chúng tôi sử dụng đồng bộ hóa khác nhau, khóa, mutices và sempahores để chờ đợi điều kiện và thức dậy chủ đề chờ đợi.
Trong Java, bạn sử dụng các nguyên thủy khác nhau như đồng bộ hóa. Bạn có thể đọc số này tutorial
+1 Tôi không hiểu tại sao thực tế này không được xem xét. – Luca
Có một vài cách mà chủ đề có thể giao tiếp với nhau. Danh sách này không đầy đủ, nhưng bao gồm các chiến lược được sử dụng nhiều nhất.
- bộ nhớ chia sẻ, như một biến hoặc một số cấu trúc dữ liệu khác
- nguyên thủy đồng bộ, giống như ổ khóa và sempahores
- Sự kiện, như
ManualResetEvent
hoặcAutoResetEvent
Bộ nhớ chia sẻ
public static void Main()
{
string text = "Hello World";
var thread = new Thread(
() =>
{
Console.WriteLine(text); // variable read by worker thread
});
thread.Start();
Console.WriteLine(text); // variable read by main thread
}
Đồng bộ hóa nguyên thủy
public static void Main()
{
var lockObj = new Object();
int x = 0;
var thread = new Thread(
() =>
{
while (true)
{
lock (lockObj) // blocks until main thread releases the lock
{
x++;
}
}
});
thread.Start();
while (true)
{
lock (lockObj) // blocks until worker thread releases the lock
{
x++;
Console.WriteLine(x);
}
}
}
Sự kiện
public static void Main()
{
var are = new AutoResetEvent(false);
var thread = new Thread(
() =>
{
while (true)
{
Thread.Sleep(1000);
are.Set(); // worker thread signals the event
}
});
thread.Start();
while (are.WaitOne()) // main thread waits for the event to be signaled
{
Console.WriteLine(DateTime.Now);
}
}
+1 cho đầy đủ. –
- 1. Giao tiếp giữa hai chủ đề
- 2. Giao tiếp giữa các chủ đề trong PySide
- 3. Luồng, giao tiếp giữa hai chủ đề C#
- 4. Thực hành tốt nhất cho khách hàng Android để giao tiếp với máy chủ bằng cách sử dụng chủ đề
- 5. Giao tiếp giữa nhiều máy chủ
- 6. Giao tiếp với máy chủ socket.io qua C#
- 7. cách tạm dừng/tiếp tục một chủ đề
- 8. Cách Tạm dừng và Tiếp tục Chủ đề trong Android?
- 9. SynchronizationContext.Current is null trong Tiếp tục trên chủ đề giao diện người dùng chính
- 10. Cách tốt nhất để giao tiếp với máy chủ bằng PhoneGap là gì?
- 11. cách áp dụng chủ đề giao diện người dùng jQuery?
- 12. Chủ đề giao diện người dùng động
- 13. Chủ đề Ruby với Watir
- 14. Máy khách Android và máy chủ Java Giao tiếp TCP
- 15. Nhật ký điền với: Đã xảy ra lỗi khi giao tiếp với máy chủ từ xa
- 16. Giao tiếp (IPC) giữa C++ với Python
- 17. Nhiều chủ đề hoặc quá trình với chủ đề
- 18. RESTful: giao tiếp hai chiều
- 19. Giao tiếp Bluetooth với Mono C#
- 20. Các vấn đề với chủ đề mờ
- 21. Giao tiếp kế thừa với IDisposable?
- 22. Giao tiếp giữa Android với PC
- 23. "Chủ đề đã bắt đầu" khi tiếp tục hoạt động
- 24. JavaScript/JQuery giao tiếp với SerialPort/COM1
- 25. Python không thể giao tiếp với tiến trình con của máy chủ Minecraft
- 26. Giao tiếp TCP qua iPhone
- 27. Tôi gặp phải vấn đề gì khi sử dụng Reflection để giao tiếp với java.math.BigInteger?
- 28. Chủ đề với trang trí
- 29. Chủ đề so với Async
- 30. Android đến giao tiếp node.js
Ngoài các câu trả lời đã được đưa ra, đánh dấu vào đây cho một e-book miễn phí cho khá một chiều sâu giới thiệu về công trình như thế nào luồng trong C# : [Sách điện tử miễn phí trên C# Threading] (http://www.albahari.com/threading/) – duesouth