Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
593 views
in Technique[技术] by (71.8m points)

c++ - boost thread::join() in a destructor is warned by a static analysis tool

Joining threads in a destructor works well for me, but it is warned by a static analysis (Coverity).

Here is my threadpool code.

class CMyThread {
    // other definitions

    std::vector<boost::thread> threadWorker;

    ~CMyThread(){
        StopThreads();
    }

    void StopThreads(){
        for (auto& t : threadWorker) {
            t.join();
        }
    }
};

Actually it works well, but SPA tool warns a possible exception from the function 'join()' because it may throw a 'thread_resource_error' and it is not acceptable for the destructor. The exception appears in the following boost code.

void thread::join() {
    if (this_thread::get_id() == get_id())
        boost::throw_exception(thread_resource_error(static_cast<int>(system::errc::resource_deadlock_would_occur), "boost thread: trying joining itself"));

        BOOST_THREAD_VERIFY_PRECONDITION( join_noexcept(),
            thread_resource_error(static_cast<int>(system::errc::invalid_argument), "boost thread: thread not joinable")
        );
    }
}

How could I guarantee that there is no 'joining itself' condition? or should I ignore the warning?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I'd add try/catch in StopThreads, won't it help? BTW, shouldn't you use if(t.joinable()) t.join(); or sth like that?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...