我想知道在C#中是否有一个内置的集合(或任何自定义集合)可用于以旋转/循环方式发出数字(参见下面的示例),并且是线程安全的(所以每个线程获取集合中的下一个数字。)
带有5个连续数字的集合:
Thread 1 read: return value 1
Thread 2 read: return value 2
Thread 3 read: return value 3
Thread 4 read: return value 4
Thread 5 read: return value 5
Thread 6 read: return value 1
Thread 7 read: return value 2
Thread 8 read: return value 3
等等。
基本上,集合发出的下一个数字(当被一个线程读取时)应该是前一个后面的数字,它应该从数字集末尾的开头重新开始。
答案 0 :(得分:0)
你可以改变一个方法,它将返回infinate enumerable:
// assign channels
std::vector<cv::Mat> ccs;
cv::Size ss(width, height);
float* data = blob->mutable_cpu_data();
for (int i = 0; i < channels; ++i) {
cv::Mat channel(ss, CV_32FC1, data);
ccs.push_back(channel);
data += ss.area();
}
cv::Mat res,dst;
// merge them
cv::merge(ccs, res);
// optional add mean if needed
cv::normalize(res, dst, 0, 1, cv::NORM_MINMAX);
cv::namedWindow("Display window");
cv::imshow("Display window", dst);
cv::waitKey(0);
得到他们:
private object _lock = new object();
private int i = 0;
private int max = 6;
public IEnumerable<int> GetNumbers()
{
while (true)
{
lock (_lock)
{
i++;
if (i == max)
i = 1;
yield return i;
}
}
}