Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

PRQA QA-

CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

CONCURRENCY.BADFUNC.CNDSIGNAL

Use of Condition Variable Signal

Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C++1778, C++1779
Include Page

Klocwork
Include Page
Klocwork_V
Klocwork_V
CERT.CONC.UNSAFE_COND_VAR
Parasoft C/
PRQA QA-
C++test

Include Page
Parasoft_V

PRQA QA-C++_V5020 

Parasoft_V

CERT_CPP-CON55-a

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

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C++: CON55-CPP

Checks for multiple threads waiting for same condition variable (rule fully covered)

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]
 

...



...

Image Modified Image Modified Image Modified