Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Parasoft C/C++test 10.4.1 update

...

Deadlock: Out-of-Sequence Step Value

Time

Thread #
(my_step)

current_step

Action

0

3

0

Thread 3 executes the first time: the predicate is false -> wait()

1

2

0

Thread 2 executes the first time: the predicate is false -> wait()

2

4

0

Thread 4 executes the first time: the predicate is false -> wait()

3

0

0

Thread 0 executes the first time: the predicate is true -> currentStep++; notify_one()

4

1

1

Thread 1 executes the first time: the predicate is true -> currentStep++; notify_one()

5

3

2

Thread 3 wakes up (scheduler choice): the predicate is false -> wait()

6

Thread exhaustion! There are no more threads to run, and a conditional variable signal is needed to wake up the others.

This noncompliant code example violates the liveness property.

...

Failing to preserve the thread safety and liveness of a program when using condition variables can lead to indefinite blocking and denial of service (DoS).

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

CON55-CPP

Low

Unlikely

Medium

P2

L3

 


Automated Detection

Tool

Version

Checker

Description

Parasoft C/C++test

Include Page
Parasoft_V
Parasoft_V

CERT_CPP-CON55-a

Do not use the 'notify_one()' function when multiple threads are waiting on the same condition variable

PRQA QA-C++

Include Page
PRQA QA-C++_V
PRQA QA-C++_V
5020
 

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

Related Guidelines

Bibliography

[IEEE Std 1003.1:2013]XSH, System Interfaces, pthread_cond_broadcast
XSH, System Interfaces, pthread_cond_signal
[Lea 2000]
 

...



...