当前位置: 技术问答>linux和unix
linux下,怎样进人临界区?
来源: 互联网 发布时间:2016-09-05
本文导语: 对于线程间共享的变量,怎样保证各个线程互斥地访问他? 如果为每个共享的变量都定义一个mutex,感觉有点麻烦和啰嗦 有么有像uCos里面的OS_ENTER_CRITICAL()之类的函数调用进人临界区? | uCos的OS_ENTER...
对于线程间共享的变量,怎样保证各个线程互斥地访问他?
如果为每个共享的变量都定义一个mutex,感觉有点麻烦和啰嗦
有么有像uCos里面的OS_ENTER_CRITICAL()之类的函数调用进人临界区?
如果为每个共享的变量都定义一个mutex,感觉有点麻烦和啰嗦
有么有像uCos里面的OS_ENTER_CRITICAL()之类的函数调用进人临界区?
|
uCos的OS_ENTER_CRITICAL是用于操作系统内系统任务互斥的。
pthread_mutex提供了更小粒度的互斥机制,有更大的灵活性。
建议把需要共享的变量组织成一个结构,再加上一个mutex 成员。
/*-
* Copy right mymtom 2009
*/
#include
#include
#include
#include
typedef struct FOOBAR {
pthread_mutex_t fb_mutex;
int fb_id;
} FOOBAR;
static FOOBAR fb = {PTHREAD_MUTEX_INITIALIZER, 0};
#define FOOBAR_ENTER_CRITICAL(fb) pthread_mutex_lock(&fb.fb_mutex)
#define FOOBAR_LEAVE_CRITICAL(fb) pthread_mutex_unlock(&fb.fb_mutex)
void *foobar_thread(void *arg)
{
FOOBAR_ENTER_CRITICAL(fb);
system("date");
fb.fb_id++;
sleep(1);
FOOBAR_LEAVE_CRITICAL(fb);
return NULL;
}
int
main(int argc, char *argv[])
{
int i, n;
pthread_t tid[10];
n = 10;
pthread_setconcurrency(10);
for (i = 0; i
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!