我有以下几点:
f1()
{
while(1)
{
call f(2) if hardware interrupt pin goes high
}
}
f2()
{
if( th() not started )
{
start thread th()
}
else
{
return thread th() status
}
}
th()
{
time-consuming operation
}
目前,我使用以下方法来发起F2一个结构():
static struct SharedData shared;
if( shared == NULL)
{
initialize shared
}
然后我一个指针传递给共享给线程。 然后线程会定期更新共享 。 然后F2()就会知道,如果日()是基于共享的元素开始,它会通过读取共享检查日的状态()。
假设共享的元素之一是互斥来提供线程安全。 这是一个很好的解决方案? 是否有这样做的更优雅的方式? 我已经测试的代码和它的作品。 我只是在这里需要一些专家的意见。
谢谢,
假设f2()
使用相同的互斥在shared
结构中读取数据,该线程之前锁定th
用途来修改数据,我看不出任何问题。
如果你有一个以上的线程调用f2()
您可能需要使用读写锁的线程状态读写th
。 互斥锁仍可使用序列化线程创建检查。 你也可以使用一个pthread_rwlock_wrlock()
连载th
创作,但代码可以说是不太清楚。
使用互斥连载th
在创作f2()
pthread_rwlock_rdlock(&shared.rwlock);
result = shared.th_status;
if (! shared.th_created) {
pthread_mutex_lock(&shared.mutex);
if (! shared.th_created) {
pthread_create(...);
shrared.th_created = 1;
}
pthread_mutex_unlock(&shared_mutex);
}
pthread_rwlock_unlock(&shared.rwlock);
return result;
使用读写锁连载th
在创作f2()
pthread_rwlock_rdlock(&shared.rwlock);
result = shared.th_status;
if (! shared.th_created) {
pthread_rwlock_unlock(&shared.rwlock);
pthread_rwlock_wrlock(&shared.rwlock);
if (! shared.th_created) {
pthread_create(...);
shrared.th_created = 1;
}
}
pthread_rwlock_unlock(&shared.rwlock);
return result;
文章来源: Sharing data between master thread and slave thread in interrupt driven environment in C