我想制作一个循环缓冲区,它有两个索引:
那么,当两个索引处于相同位置时,如何暂停Thread。 我的意思是,如果你没有写任何新数据,你就无法读取它,所以如果writeindex和readindex位于同一位置,你只需要编写新数据,而不是读取它。
如何阻止线程直到发生某些事情?
答案 0 :(得分:5)
您正在寻找的内容已经在BCL中:BlockingCollection<T>
。
它是线程安全的:它有一个Add()
method来添加项目和一个阻塞Take()
method阻塞(“暂停调用线程”)直到一个项目可用。
正如现在删除的评论中所提到的:这确实不是真正的循环缓冲区,一旦达到最大值就处理或覆盖项目。您可以设置集合大小的上限;这会使if (isset($_POST['update'])){
$UpdateQuery = "UPDATE eventcalendar SET Title='$_POST[title]', Detail='$_POST[detail]' WHERE ID='$_GET[ID]'";
mysql_query($UpdateQuery, $con);
}
$sql = "SELECT * FROM eventcalendar";
$myData = mysql_query($sql,$con);
echo "<table border=1'>
<tr>
<th>Id</th>
<th>Title</th>
<th>Detail</th>
<th>Event Date</th>
<th>Date Added</th>
</tr>";
while($row = mysql_fetch_array($myData)){
echo "<form action=details.php method=post>";
echo "<tr>";
echo "<td>" . $row['ID'] . "</td>";
echo "<td>" . "<input type=text name=title value=" . $row['Title'] . " </td>";
echo "<td>" . "<input type=text name=detail value=" . $row['Detail'] . " </td>";
echo "<td>" . $row['eventDate'] . "</td>";
echo "<td>" . $row['dateAdded'] . "</td>";
echo "<td>" . "<input type=submit name=update value=update" . " </td>";
echo "</tr>";
echo "</form>";
}
echo "</table>";
mysql_close($con);
阻塞,直到有更多空间。