WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

C++ · Advanced · question 46 of 100

How can you achieve thread-safety in a C++ application? Discuss the use of mutexes and locks.?

📕 Buy this interview preparation book: 100 C++ questions & answers — PDF + EPUB for $5

Thread-safety is the property of a program or application where it can be safely accessed and manipulated by multiple threads concurrently without causing any data races or unexpected behaviors. In C++, there are several ways to achieve thread-safety, and one common approach is to use mutexes and locks.

Mutexes and locks are synchronization mechanisms that can be used to protect shared resources and data structures from concurrent access by multiple threads. A mutex is an object that can be locked and unlocked by threads to gain exclusive access to a shared resource. A lock is a higher-level abstraction that provides a more convenient way to lock and unlock a mutex.

Here is an example that shows how to use mutexes and locks to achieve thread-safety in a simple C++ program:

    #include <iostream>
    #include <thread>
    #include <mutex>
    
    std::mutex mtx;
    
    void increment(int& counter) {
        for (int i = 0; i < 10000; ++i) {
            std::lock_guard<std::mutex> lock(mtx);
            ++counter;
        }
    }
    
    int main() {
        int counter = 0;
        
        std::thread t1(increment, std::ref(counter));
        std::thread t2(increment, std::ref(counter));
        
        t1.join();
        t2.join();
        
        std::cout << "Counter value: " << counter << std::endl;
        
        return 0;
    }

In this example, two threads are incrementing a shared counter variable concurrently. To prevent data races and ensure thread-safety, a mutex object named ’mtx’ is created to protect the counter variable. The ’std::lock_guard’ object is used to automatically lock and unlock the mutex object when the scope is exited. This ensures that only one thread can access the counter variable at any given time.

The ’std::ref’ function is used to pass the counter variable by reference to the increment function, which takes an integer reference as a parameter. This ensures that both threads are working on the same counter variable.

After both threads have completed their work, the value of the counter variable is printed to the console, and it should always be 20000 if the program is thread-safe.

In summary, mutexes and locks are powerful tools that can be used to achieve thread-safety in C++ applications. By protecting shared resources with mutexes and using locks to provide a higher-level abstraction for locking and unlocking them, you can ensure that your program behaves correctly even in the presence of multiple concurrent threads.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic C++ interview — then scores it.
📞 Practice C++ — free 15 min
📕 Buy this interview preparation book: 100 C++ questions & answers — PDF + EPUB for $5

All 100 C++ questions · All topics