我有三个类,我们称它们为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难以滥用。而且那仍然是线程安全的。