对临界区进行多层次化是否有效?

时间:2015-06-08 13:12:12

标签: c++ winapi critical-section

例如,这有效吗?

<?php

if (isset($_POST["afzender"])){
    $_SESSION['afzender'] = $_POST['afzender'];
}

$servername = "localhost";
$username = "*******";
$password = "******";
$dbname = "*****";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO 'chatbox_berichten'
(''id', 'afzender', 'chatbox_id', 'bericht', 'tijd')
VALUES (NULL, '".$_SESSION['afzender']."', '', '".$_POST['bericht']."', CURRENT_TIMESTAMP);";
echo $sql;
if ($conn->query($sql) === TRUE) {
    echo "Succesvol Toegevoegd.";
} else {
    echo $conn->connect_error;
}
echo "<hr/>";

$sql = "SELECT * FROM chatbox_berichten";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table border='2'>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["id"]. "<td>" . $row["afzender"]. "<td>" . $row["bericht"]. "  <td>" . $row["tijd"]. "</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}


$conn->close();
?>
<?php echo $_SESSION['afzender']; ?>        
<form action="home.php" method="post">
Bericht: <input type="text" name="bericht"><br>
<input type="submit">
</form>

我想用两个关键部分来保护两段代码。 我可以这样做吗?

可能的重复: Is it valid to nest a critical section?

2 个答案:

答案 0 :(得分:1)

每当您有多个锁并且可能在一个时间点保留多个锁时,您必须确保始终以相同的顺序获取锁。不遵守此规定可能导致死锁。

这是一个广为人知且广泛讨论的规则。例如,Use Lock Hierarchies to Avoid Deadlock

答案 1 :(得分:0)

我认为你的问题与你提到的问题不同,因为你有两个不同的关键部分。

无论如何你可以嵌套它们但是你必须小心地按照相同的顺序输入/获取它们,否则你就有可能陷入僵局。

相关问题