我有三个类,我们称它们为A,B和HardwareDriver。每个类都有一个实例。 a和b在两个不同的线程中运行。他们俩都通过HardwareDriver实例访问硬件。就像是:

Class A {
... };

Class B {
... };

Class HardwareDriver {
    public:
        int accessHardware();
};

A a;
B b;
HardwareDriver hd;
pthread_t aThread;
pthread_t bThread;

main() {
    pthread_create(&aThread, NULL, &A::startA, &a);
    pthread_create(&bThread, NULL, &B::startB, &b);

    while (...) { };
    return 0;
}

硬件不能同时被a和b访问,因此我需要使用互斥锁保护代码。我是多线程技术的新手,但凭直觉,我会在A和B方法通过调用hd.accessHardware()请求硬件访问之前将其锁定在A和B方法中。

现在,我想知道是否有可能在hd.accessHardware()中执行锁定以进行更多封装。这仍然是线程安全的吗?

最佳答案



这样就有可能忘记在调用hd.accessHardware()之前锁定该互斥锁。



这样就消除了忘记锁定该互斥锁的风险,并使您的API难以滥用。而且那仍然是线程安全的。

10-06 06:56