当前位置: 技术问答>linux和unix
Linux下用线程来煮汤圆和吃汤圆,并赋诗一首,祝大家元宵节快乐
来源: 互联网 发布时间:2016-11-08
本文导语: 十年生死两茫茫,写程序,到天亮。 千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。 领导每天新想法,天天改,日日忙。 相顾无言,惟有泪千行。 每晚灯火阑珊处,又加班,工作狂。 ----谨以此祝大家...
十年生死两茫茫,写程序,到天亮。 千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。
领导每天新想法,天天改,日日忙。 相顾无言,惟有泪千行。 每晚灯火阑珊处,又加班,工作狂。
----谨以此祝大家 : 元宵节快乐
(转载于某QQ群)
-----------------------------------------我是分割线----你看不见我-------------------------------------------
呵呵,小弟这两天在看Linux下的多线程编程,对于互斥体有些疑问,希望高人指点一下,嘿嘿 ,问题是这样的
#include ....
pthread_mutex_t * my_mutex;
int tang_yuan, num;
void *thread_zhu_tangyuan() //煮汤圆线程
{
sleep(5);
pthread_mutex_lock(my_mutex); //上锁
printf("没看我在煮汤圆呢吗?有什么事回头再说,真是的~~n");
tang_yuan++; //共享变量——tangyuan
num++; //共享变量——num
pthread_mutex_unlock(my_mutex);//解锁
}
void *thread_eat_tangyuan() //吃汤圆线程
{
sleep(5);
pthread_mutex_lock(my_mutex);
printf("正在吃汤圆呢,有什么事回头再说n");
tang_yuan--;
num--;
pthread_mutex_unlock(my_mutex);
}
int main(void)
{
pthread_t zhu_tangyuan, eat_tangyuan;
pthread_create(zhu_tangyuan, NULL, thread_zhu_tangyuan, NULL); //创建第一个线程
pthread_create(eat_tangyuan, NULL, thread_eat_tangyuan, NULL); //创建第二个线程
...
}
我一直不解的是,别的线程怎么知道我给哪些共享资源上了锁??比如本例中,当煮汤圆线程给tang_yuan和num上锁了,那么吃汤圆线程怎么知道tang_yuan和num这两个变量被上锁了???也就是说,你怎么知道哪些资源被上锁了,哪些没被上锁??
如果你想夸俺标题党的话,那么还是不要说了,你懂的。。。
领导每天新想法,天天改,日日忙。 相顾无言,惟有泪千行。 每晚灯火阑珊处,又加班,工作狂。
----谨以此祝大家 : 元宵节快乐
(转载于某QQ群)
-----------------------------------------我是分割线----你看不见我-------------------------------------------
呵呵,小弟这两天在看Linux下的多线程编程,对于互斥体有些疑问,希望高人指点一下,嘿嘿 ,问题是这样的
#include ....
pthread_mutex_t * my_mutex;
int tang_yuan, num;
void *thread_zhu_tangyuan() //煮汤圆线程
{
sleep(5);
pthread_mutex_lock(my_mutex); //上锁
printf("没看我在煮汤圆呢吗?有什么事回头再说,真是的~~n");
tang_yuan++; //共享变量——tangyuan
num++; //共享变量——num
pthread_mutex_unlock(my_mutex);//解锁
}
void *thread_eat_tangyuan() //吃汤圆线程
{
sleep(5);
pthread_mutex_lock(my_mutex);
printf("正在吃汤圆呢,有什么事回头再说n");
tang_yuan--;
num--;
pthread_mutex_unlock(my_mutex);
}
int main(void)
{
pthread_t zhu_tangyuan, eat_tangyuan;
pthread_create(zhu_tangyuan, NULL, thread_zhu_tangyuan, NULL); //创建第一个线程
pthread_create(eat_tangyuan, NULL, thread_eat_tangyuan, NULL); //创建第二个线程
...
}
我一直不解的是,别的线程怎么知道我给哪些共享资源上了锁??比如本例中,当煮汤圆线程给tang_yuan和num上锁了,那么吃汤圆线程怎么知道tang_yuan和num这两个变量被上锁了???也就是说,你怎么知道哪些资源被上锁了,哪些没被上锁??
如果你想夸俺标题党的话,那么还是不要说了,你懂的。。。
|
吃线程想去吃的时候,首先pthread_mutex_lock(my_mutex);
如果当前是锁定的,也就是说正在煮..
那么吃线程就等在那儿了,直到汤圆煮好(锁被释放)
如果当前是锁定的,也就是说正在煮..
那么吃线程就等在那儿了,直到汤圆煮好(锁被释放)
|
锁的信息应该是在内核中维护的
|
背后的大山是操作系统....
|
操作系统会搞掂一切然后祝大家节日快乐的
|
“吃汤圆线程怎么知道tang_yuan和num这两个变量被上锁”
-----
写程序的人知道
吃线程与煮线程是协调操作的
如果吃线程不理这些规则,强制去吃也是可以的,那么变量num就可能变成负值,卯吃寅粮
-----
写程序的人知道
吃线程与煮线程是协调操作的
如果吃线程不理这些规则,强制去吃也是可以的,那么变量num就可能变成负值,卯吃寅粮
|
对啊
一个线程锁定mutex之后,就可以随意操作一些共享资源,完成之后释放mutex
在此期间,别的线程不能得到mutex
一个线程锁定mutex之后,就可以随意操作一些共享资源,完成之后释放mutex
在此期间,别的线程不能得到mutex
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。