- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 ASP.NET 中有一个生产者-消费者场景。我设计了一个Producer
类,一个Consumer
类和一个用于保存共享对象并负责Producer 和Consumer 之间通信的类,我们称它为Mediator
。因为我在启动时 fork 执行路径(在父对象中)并且一个线程会调用 Producer.Start()
而另一个线程会调用 Consumer.Start()
,我需要将 Mediator
的引用传递给 Producer
Và Consumer
(通过 Constructor
)。 Mediator
是一个智能类,它将优化许多事情,例如它的内部队列的长度,但现在将其视为循环阻塞队列。 Producer
会将新对象排队đếnMediator
,直到队列满为止,然后Producer
会阻塞。 Consumer
dequeues từ Mediator
的对象,直到队列中没有任何对象。对于线程之间的信号,我在 Mediator
类中实现了两个方法:Wait()
Và Pulse()
。代码是这样的:
Class Mediator
{
private object _locker = new object();
public void Wait()
{
lock(_locker)
Monitor.Wait(_locker);
}
public void Pulse()
{
lock(_locker)
Monitor.Pulse(_locker);
}
}
// This way threads are signaling:
Class Consumer
{
object x;
if (Mediator.TryDequeue(out x))
// Do something
khác
Mediator.Wait();
}
在 Mediator 内部,每次入队hoặc出队时,我都会使用this.Pulse()
,这样等待的线程就会收到信号并继续它们的工作.
但我遇到了死锁,因为我从未使用过这种设计来发送信号线程,所以我不确定是设计有问题还是我在其他地方做错了什么?
Cảm ơn
câu trả lời hay nhất
这里没有太多代码可以继续,但我最好的猜测是你有一个 live-lock问题。如果 Mediator.Pulse
hiện hữu Mediator.Wait
之前调用,那么即使队列中有内容,信号也会丢失。这是实现阻塞队列的标准模式。
public class BlockingQueue
{
private Queue m_Queue = new Queue();
public void Enqueue(T item)
{
lock (m_Queue)
{
m_Queue.Enqueue(item);
Monitor.Pulse(m_Queue);
}
}
public T Dequeue()
{
lock (m_Queue)
{
while (m_Queue.Count == 0)
{
Monitor.Wait(m_Queue);
}
return m_Queue.Dequeue();
}
}
}
请注意 Monitor.Wait
是如何仅在队列为空时调用的。还要注意它是如何在 trong khi
循环中被调用的。这是因为 Wait
KHÔNG Enter
的优先级,因此进入 Dequeue
的新线程可能会占用最后一项,即使调用Wait
准备返回。如果没有循环,线程可能会尝试从空队列中删除一个项目。
关于c# - Monitor.Wait() 和 Monitor.Pulse() 的线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956127/
Tôi sử dụng Bootstrap với tập lệnh css và java. Tôi thực sự gặp khó khăn khi vẽ nền này bằng css mà không ảnh hưởng đến mã giao diện người dùng. Trong nhiều câu hỏi, mọi người đặt chiều rộng và chiều cao thành 0%. Nhưng vì thanh điều hướng của tôi nên tôi không thể sử dụng
Tôi đang viết chương trình bằng c để đọc nội dung của tệp. Mã như sau: #include void main() { char line[90] while(scanf("%79[^\
Tôi muốn nhận tất cả các cặp dòng Góc trong một mảng ma trận bằng javascript. Giả sử đầu vào và đầu ra như sau: đầu vào = [ [1,2,3], [4,5,6], [7,8,9], ] đầu ra =
Có thể vẽ đường thẳng, hình tròn và các hình dạng khác bằng pdfmake không? Nếu có, có tài liệu hoặc mẫu không? Tôi muốn thay thế pdfmake bằng jsPDF. Câu trả lời hay nhất Có, có thể. pdfm
Tôi có một tiện ích svg nhỏ có mục đích hiển thị danh sách các góc (xem hình). Bây giờ góc là một phần tử đường chỉ có một nét và không có phần tô màu. Nhưng bây giờ tôi muốn sử dụng màu "tô bên trong" và màu "nét/viền". Tôi đoán phần tử dòng không giải quyết được vấn đề này,
Tôi đang viết một bộ chuyển đổi ánh sáng rất cơ bản cho cảnh 3D với các vật thể hình tam giác, mọi thứ đều hoạt động tốt cho đến khi tôi quyết định thử chuyển đổi tia từ một điểm khác với điểm gốc của cảnh (0/0/0). Tuy nhiên, khi tôi thay đổi gốc tia thành (0/1/0), bài kiểm tra giao điểm sẽ bị hỏng
Câu hỏi này đã có câu trả lời: Tại sao người ta viết "#!/usr/bin/env python" trên dòng đầu tiên của tập lệnh Python? (22 câu trả lời?
Làm cách nào tôi có thể vẽ một đường ngang bằng cách sử dụng khoảng 50 dấu hoa thị* và sử dụng vòng lặp for? Khi tôi cố gắng thực hiện việc này, kết quả là một danh sách dọc (thay vì ngang) gồm 50 dấu hoa thị. public void drawAstline() { f
Đây là giao diện người dùng làm cho quả bóng rơi theo đường chéo, nhưng quả bóng vẫn đứng yên; đường ren dường như không hoạt động bình thường. Bạn có thể chỉ cho tôi cách làm cho quả bóng chuyển động được không? Vui lòng tải xuống quả bóng và thay đổi thư mục để chương trình có thể tìm thấy vị trí được chỉ định cho quả bóng của bạn. Không cần phải tải xuống sân bóng đá, nhưng bạn có thể nếu muốn
Tôi đang sử dụng Jmeter và Ant trong một trong các dự án của mình, khi chúng tôi tạo báo cáo, nó sẽ hiển thị URL, #Samples, Thất bại, Tỷ lệ thành công, Thời gian trung bình, Thời gian tối thiểu, Thời gian tối đa trong báo cáo. Tôi cũng muốn đưa mốc thời gian 90% vào báo cáo. Hiện nay
Tôi có một vấn đề bất thường và hy vọng ai đó có thể giúp tôi. Tôi muốn vẽ một đường Xoay hoặc đường lượn sóng bằng Canvas (android) nhưng tôi không biết cách thực hiện. Nó sẽ là đuôi của con nòng nọc, vì vậy lý tưởng nhất là tôi muốn nó có hình dạng giống hình tam giác hơn, với một đầu lớn hơn
Câu hỏi này đã có câu trả lời: Kiểm tra sự va chạm của các hình dạng bằng JavaFX (1 câu trả lời) Đã đóng 8 năm trước. Tôi đang sử dụng thư viện JavaFx 8. Nhiệm vụ của tôi rất đơn giản: Tôi muốn kiểm tra
Cách chia tập tin theo tỷ lệ phần trăm được đánh số. Số hàng? Giả sử tôi muốn chia tệp của mình thành 3 phần (60%/20%/20% phần), tôi có thể thực hiện việc này theo cách thủ công, -_-: $ wc -l brown.txt 57339 brown.tx
Tôi đang cố gắng đạt được điều gì đó như thế này: Nhưng đây là điều tôi đã làm được. Bạn có thể giúp tôi đạt được kết quả mong muốn? Cập nhật: Nếu tôi xóa phần phụ thuộc bootstrap.css, sự cố sẽ biến mất. Làm cách nào tôi có thể làm cho nó hoạt động với Bootstrap?
Tôi hiện đang xây dựng một trang web và gặp sự cố với biến đổi: tỷ lệ. Tôi có một nút và khi người dùng di chuột qua nó, có hai điều xảy ra: Nền "quét" theo đường Góc Nhãn nút thay đổi màu Nút thay đổi một chút
Tôi cần vẽ đồ thị của một số lượng lớn điểm dữ liệu bằng cách sử dụng các đường thẳng và phép biến đổi affine (chia tỷ lệ biểu đồ để vừa với Chế độ xem). Hiện tại, tôi đang sử dụng NSBezierPath, nhưng tôi nghĩ nó không hiệu quả (vì các điểm được sao chép vào đường dẫn bezier trước khi vẽ). Bằng cách cắt dữ liệu của tôi thành
Tôi đang sử dụng trình phát hiện tính năng HOG dựa trên phân loại SVM. Tôi có thể trích xuất thành công biển số xe, nhưng biển số xe được trích xuất có một số pixel/dòng không cần thiết ngoài số biển số xe. Luồng xử lý hình ảnh của tôi như sau: Áp dụng bộ dò HOG trên ảnh thang độ xám để cắt tông màu vùng được phát hiện
Tôi có hình ảnh sau: Tôi muốn điền vào đường viền của nó (tức là tôi muốn điền các dòng vào hình ảnh này). Tôi đã thử đóng hình thái nhưng sử dụng hạt nhân hình chữ nhật có kích thước 3x3 và 10 lần lặp không lấp đầy toàn bộ đường viền. Tôi cũng đã thử lõi 21x21 và 1 lần lặp, nhưng
Tôi phải tìm một thuật toán có thể tìm tổng số giao điểm giữa hai tập hợp mảng, một trong số đó đã được sắp xếp. Ví dụ ta có 2 mảng này và vẽ các đường thẳng đến các số tương ứng. Hai mảng này cho chúng ta tổng cộng 7 giao điểm. Có thuật toán nào có thể giúp tôi giải quyết vấn đề này không
Nói một cách đơn giản - Tôi muốn vẽ một tia/đường thẳng từ mặt phẳng cắt gần đến mặt phẳng cắt xa bằng cách sử dụng phép chiếu phối cảnh. Tôi có những gì tôi tin là tọa độ thế giới được chuẩn hóa chính xác được tạo bằng một cú nhấp chuột bằng các phương pháp được mô tả trong các hướng dẫn lập trình đồ họa/OpenGL khác nhau. Vấn đề tôi đang gặp phải là đèn của tôi dường như
Tôi là một lập trình viên xuất sắc, rất giỏi!