GithubHelp home page GithubHelp logo

Comments (12)

mtrebi avatar mtrebi commented on June 30, 2024

Hey,

Thanks for notifying me. I had no idea someone performed tests on my thread pool and it failed. I actually never thought someone would use this. I did this project to learn how threads worked and never expected someone to use it in a professional environment. I did everything for learning purposes.

Nowadays, I am really busy with my current job but I keep this in mind and I'll try to fix it in the future.

Thanks,

Mariano.

from thread-pool.

jwang01 avatar jwang01 commented on June 30, 2024

Looks like there is deadlock which cause cpu to go 0 and app freezes.

from thread-pool.

yvoinov avatar yvoinov commented on June 30, 2024

Deadlock can occurs due to race/spurious wakeup.

from thread-pool.

jwang01 avatar jwang01 commented on June 30, 2024

It seems that it is missing the lockguard/unique_lock in two places:
m_conditional_lock.notify_all()
and
m_conditional_lock.notify_one()

from thread-pool.

yvoinov avatar yvoinov commented on June 30, 2024

It doesn't work that way. To protect against spurious wakeup, you should do something like this: https://github.com/yvoinov/thread-pool-cpp/blob/thread-pool-cpp-round-robin-stealing/include/thread_pool/worker.hpp. Mutexes do not play here. (If we're really have spurious wakeup case here.)

from thread-pool.

jwang01 avatar jwang01 commented on June 30, 2024

The code seems a bit complicated. What's spurious wakeup case, do you mind elaborating a little bit on it? https://stackoverflow.com/questions/17101922/do-i-have-to-acquire-lock-before-calling-condition-variable-notify-one
also:
https://thispointer.com/c11-multithreading-part-7-condition-variables-explained/

from thread-pool.

yvoinov avatar yvoinov commented on June 30, 2024

https://stackoverflow.com/questions/17101922/do-i-have-to-acquire-lock-before-calling-condition-variable-notify-one

This about different thing. Of course, you always can make your own tests to prove your own theory :)

from thread-pool.

jwang01 avatar jwang01 commented on June 30, 2024

You can also refer to this example: https://github.com/vit-vit/ctpl, which is working, but a bit slower.

from thread-pool.

yvoinov avatar yvoinov commented on June 30, 2024

I can cite a bunch of links proving that there is no need to block the notification of conditional variables. But I will not. :) You can continue to stay with your own delusions. :) But I advise you to better examine the issue of spurious wakeup.

from thread-pool.

yvoinov avatar yvoinov commented on June 30, 2024

In addition: Mutexes is not slow. Slow only lock contention. So, think more, does you really want to slow down thread pool.

from thread-pool.

jwang01 avatar jwang01 commented on June 30, 2024

It looks to me the bug is in line 32: m_pool->m_conditional_lock.wait(lock); Here it needs to check certain condition is met or not to tell whether it is spurious wake up or not.

m_pool->m_conditional_lock.wait(lock, [this]{return ! m_pool->m_queue.empty();});

from thread-pool.

C8LUKA avatar C8LUKA commented on June 30, 2024

It looks to me the bug is in line 32: m_pool->m_conditional_lock.wait(lock); Here it needs to check certain condition is met or not to tell whether it is spurious wake up or not.

m_pool->m_conditional_lock.wait(lock, [this]{return ! m_pool->m_queue.empty();});

I think you right, you can set up cpu core to thread to avoid that, or trying to wait_for certain time

from thread-pool.

Related Issues (15)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.