线程互斥锁相关程序《转载》

By | 06月22日
Advertisement

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int count = 0;

void* function1( void* arg )
{
int tmp = 0;

while( 1 ) {
pthread_mutex_lock( &mutex );
tmp = count++;
pthread_mutex_unlock( &mutex );
printf( "Count is %d\n", tmp );

/* snooze for 1 second */
sleep( 1 );
}

return 0;
}

void* function2( void* arg )
{
int tmp = 0;

while( 1 ) {
pthread_mutex_lock( &mutex );
tmp = count--;
pthread_mutex_unlock( &mutex );
printf( "** Count is %d\n", tmp );

/* snooze for 2 seconds */
sleep( 2 );
}

return 0;
}

int main( void )
{
pthread_create( NULL, NULL, &function1, NULL );
pthread_create( NULL, NULL, &function2, NULL );

/* Let the threads run for 60 seconds. */
sleep( 60 );

return 0;
}

Similar Posts:

  • 信号量与线程互斥锁的区别

    信号量与线程互斥锁的区别 "信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里).而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源.比如对全局变量的访问,有时要加锁,操作完了,在解锁.有的时候锁和信号量会同时使用的" 也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线

  • oracle锁相关问题

    前言 在程序开发和数据库开发的时候,经常会遇到锁表或者锁存储的情况,自然而然的就需要处理锁.本文旨在介绍处理过程以及处理方法.如有不对的地方,欢迎大家拍砖o(∩_∩)o 正文 文章主要分为两部分:查锁.解锁 1.查锁 当遇到死锁的时候,可以通过脚本 SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#, l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SES

  • 线程和进程、程序、应用程序之间的关系

    看到一种说法是"一个程序至少有一个进程,一个进程至少有一个线程",这种把程序与进程,进程与线程的关系混淆的说法是错误的. 程序(program)只能有一个进程,一个进程就是一个程序.有人说,我打开一个程序,比如chrome,有十多个进程呢,这是咋回事.那就是十多个程序,操作系统给他们分配了彼此独立的内存,相互执行不受彼此约束,分配同样时间的CPU.对于用户而言,他们是一个整体,我们通常称之为应用程序(application).对于计算机而言,一个进程就是一个程序,多个进程(比如一个浏览

  • 使用API函数CDdoor 来控制光驱门的开和关程序十分简单

    使用API函数CDdoor 来控制光驱门的开和 1 2 3 4 5 6 7 8 9 10 关程序十分简单,由于 CDdoor 函数自身包含了对异常错 1 2 3 4 5 6 7 8 9 10 误的处理机制,因此这个程序的通用性很高,你可以把这段代码移植 1 2 3 4 5 6 7 8 9 10 到你的程序中,实现某些多媒体播放器所常用的开关光驱的功能. 为了学习方便,提供的源码已经作了 1 4 5 6 7 8 9 10 11 12 1 5 6 7 8 9 10 11 12 13 1 6 7 8

  • 什么是线程互斥

    线程之间通信的两个基本问题是互斥和同步 线程同步是指线程之间具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒 线程互斥是指对于共享的操作系统资源,在各线程访问时的排他性.当有若干戈线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其他要使用该资源必须等到,直到占用资源者释放该资源. 线程互斥是一种特殊的线程同步. 实际上,互斥和同步对应着线程间通信发生的两种情况: 1.当有多个线程访问共享资源而不使用资源被破坏时;

  • 多线程编程 线程互斥 线程同步

    线程和互斥锁 •线程就是"轻量级"的进程. •线程与创建它的进程共享代码段,数据段. •线程拥有自己独立的栈. 在实际应用中,多个线程往往会访问同一数据或资源,为避免线程之间相互影响,需要引入线程互斥机制,而互斥锁(mutex)互斥机制中的一种. 特别注意,在使用线程函数的时候,编译和连接还必须要加上一个特殊的库pthread,即 gcc –lpthread - 一个进程创建线程之后,当该进程结束,创建的线程也会结束,但是创建的子进程不会结束. 创建线程 函数原形: int pthre

  • 黑马程序员——Java多线程—线程互斥—Lock

    CSDN: java的Lock小结 [Java线程]锁机制:synchronized.Lock.Condition

  • Java线程(三):线程协作-生产者/消费者问题(转载)

    上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问题是一个经典的线程同步以及通信 的案例.该问题描述了两个共享固定大小缓冲区的线程,即所谓的"生产者"和"消费者"在实际运行时会发生的问题.生产者的主要作用是生成一定量的数据放到 缓冲区中,然后重复此过程.与此同时,消费者也在缓冲区消耗这些数据.该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空 时消耗数据.要解决该问题,就必须

  • Java线程(四):JUC包线程互斥与同步以及读写锁

    前言: 1.Java线程(一):传统线程的实现.互斥与通信 一.线程的互斥 (一)传统互斥:synchronized 关键字 1.synchronized(对象) 代码块需要锁定同一个对象,一般会锁定业务类对象,即synchronized(this)即可. 2.如静态方法互斥,则需要锁定内存中的字节码对象,即synchronized(XXX.class). 3.synchronized 方法锁定的也是对象. /** * synchronized 方法 * 其实锁定的也是Outputer 对象 *

  • Linux下多线程编程—线程互斥访问资源(线程锁)和线程同步工作(有次序的工作)(条件变量)

    互斥与同步 互斥和同步是两个紧密相关而又容易混淆的概念. 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性.但互斥无法限制访问者对资源的访问顺序,即访问是无序的. 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问.在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的.少数情况是指可以允许多个访问者同时访问资源,如"第一类读写者模型". 实现线程对资源互斥访问,而无法控制线程对资源访问顺序的是: 互斥量: #incl

Tags: