`

pthread_mutex_lock Test

    博客分类:
  • APUE
阅读更多
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>

#define MAX 100000000
static pthread_mutex_t iLock = PTHREAD_MUTEX_INITIALIZER;
long count = 0;

void myThreadA(void)
{
    long i, j;
    pthread_mutex_lock(&iLock);
    for (i=0; i<MAX; ++i)
    {
        j = count;
        ++j;
        count = j;
    }
    printf("A The count is %ld\n", count);
    pthread_mutex_unlock(&iLock);
}
void myThreadB(void)
{
    long i, j ;
    pthread_mutex_lock(&iLock);
    for (i=0; i<MAX; ++i)
    {
        j = count;
        ++j;
        count = j;
    }
    printf("B The count is %ld\n", count);
    pthread_mutex_unlock(&iLock);
}
int main(int argc, char *argv[])
{
    pthread_t tidA, tidB;
    int i,ret;

    ret = pthread_create(&tidA, NULL, (void *)myThreadA, NULL);
    if (0 != ret)
    {
        puts("Create A pthread error");
        exit(1);
    }

    ret = pthread_create(&tidB, NULL, (void *)myThreadB, NULL);
    if (0 != ret)
    {
        puts("Create B pthread error");
        exit(1);
    }

    puts("This is the main process.\n");
    pthread_join(tidA, NULL);
    pthread_join(tidB, NULL);

    printf("The final count is %ld\n", count);

    return 0;
}

gcc -lpthread pmlock.c
分享到:
评论

相关推荐

    Linux多线程之条件阻塞代码

    通过`pthread_mutex_lock()`和`pthread_mutex_unlock()`函数,我们可以锁定和解锁互斥锁。 2. **条件变量(pthread_cond_wait, pthread_cond_signal)** 条件变量是另一种重要的线程同步工具,允许线程在满足特定...

    linux和win32下通用的互斥锁Mutex封装

    4. `test_mutex.cpp`:测试程序,展示了如何在实际应用中使用Mutex类。 使用这个封装库时,开发者可以按照以下步骤进行: 1. 包含`mutex.h`头文件,引入Mutex类。 2. 创建Mutex对象,并初始化它。 3. 在需要保护的...

    qt 下进程条

    pthread_mutex_lock(&count;_mutex); value=count; printf("%d:%d\n",pthread_self(),value+1); count=value+1; pthread_mutex_unlock(&count;_mutex); } return (NULL); } int main(int argc,char ** argv) { ...

    pthreadexample_linux线程_

    关键函数有`pthread_mutex_init()`初始化互斥锁,`pthread_mutex_lock()`获取锁,`pthread_mutex_unlock()`释放锁。 3. `pthread_attr.c`:此文件涉及到线程属性的设置和使用,如栈大小、调度策略等。`pthread_attr...

    linux 买票退票系统

    在 pthread1 函数中,我们使用 while 循环不断地卖出票,并使用 pthread_mutex_lock 函数锁定 mutex 对象,以防止多个线程同时访问共享资源 tickets。同时,我们使用 rand() 函数生成随机数,决定是否卖出票。在 ...

    pthread-test

    `pthread_mutex_lock()`和`pthread_mutex_unlock()`分别用于获取和释放锁。 3. **线程通信**:线程间的通信通常通过信号量(semaphore)或条件变量(condition variable)实现。信号量可以控制对共享资源的访问数量...

    C语言多线程

    - 加锁: `pthread_mutex_lock(pthread_mutex_t *mutex);` - 解锁: `pthread_mutex_unlock(pthread_mutex_t *mutex);` - **条件变量**: - 创建: `pthread_cond_init(pthread_cond_t *cond, const pthread_...

    c语言多线程 c语言多线程

    加锁pthread_mutex_lock;解锁 pthread_mutex_unlock。 * 条件锁:创建 pthread_cond_init ;销毁 pthread_cond_destroy;触发pthread_cond_signal;广播 pthread_cond_broadcast;等待pthread_cond_wait。 * 正确...

    C代码线程测试.rar

    `pthread_mutex_lock()` 和 `pthread_mutex_unlock()` 分别用于获取和释放锁。 - **条件变量(Condition Variables)**:`pthread_cond_t` 允许线程等待特定条件满足。`pthread_cond_wait()` 会阻塞线程,直到其他...

    C实现循环缓冲区,线程交替执行,进行数据读取

    循环缓冲区(Circular Buffer)是一种在内存中实现的数据结构,常用于多线程环境下的数据共享,特别是当...例如,`Test_CirBuf`这个示例可能就是一个包含具体实现循环缓冲区和线程交替执行的代码,供开发者参考学习。

    基于韦东山的嵌入式Linux应用开发基础知识视频教程,我所练习而写的代码

    5. **test5.1 pthread create** 和 **test5.4 pthread mutexLock**、**test5.5 pthread cond_mutex**:这些与多线程编程有关。`pthread_create`用于创建新的线程,`pthread_mutex_lock`和`pthread_cond_mutex`则涉及...

    Linux多线程使用互斥量同步线程

    int pthread_mutex_lock(pthread_mutex_t *mutex); ``` - 参数: - `mutex`:指向待锁定的互斥量。 - 返回值: - 成功:返回0。 - 失败:返回错误代码。 3. **pthread_mutex_unlock**:解锁互斥量。 ```c ...

    pthread-test.rar_Linux/Unix编程_C#_

    例如,`pthread_mutex_lock()`和`pthread_mutex_unlock()`用于锁定和解锁互斥锁。 5. **线程通信**:线程间可以通过条件变量、信号量或共享内存进行通信。条件变量常与互斥锁配合,允许线程等待某个特定条件满足后...

    windows VS2010编译最新pthreads-w32-2-9-1静态库

    例如,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束,`pthread_mutex_lock()`和`pthread_mutex_unlock()`处理线程同步等。 在编译过程中可能会遇到一些问题,比如配置不正确导致的链接错误,...

    c语言面试题

    pthread_mutex_lock(&mutex); while (in - out == 0) pthread_cond_wait(&empty, &mutex); printf("Consumed: %d\n", buffer[out++]); pthread_cond_signal(&full); pthread_mutex_unlock(&mutex); } } ```...

    thl_r16_tinav2.0_hm1375验证通过_增加打印设备ID_20170824_1447.7z

    mutex_lock(&probe_hdl_lock); vfe_print("probe_work_handle start!\n"); vfe_dbg(0,"v4l2_device_register\n"); #ifdef USE_SPECIFIC_CCI vfe_clk_open(dev); #endif /* v4l2 device register */ ret = v4l2...

    hm1375_tinav2.1验证通过_增加设备ID的读取显示_20170825_1333没有外层目录.7z

    mutex_lock(&probe_hdl_lock); vfe_print("probe_work_handle start!\n"); vfe_dbg(0,"v4l2_device_register\n"); #ifdef USE_SPECIFIC_CCI vfe_clk_open(dev); #endif /* v4l2 device register */ ret = v4l2...

    r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z

    pthread_mutex_lock(mutex); //used for cammand and status debug if (old_vi_cmd != cap-&gt;cmd){ hv_dbg("capture frame command %d --&gt; %d\n",old_vi_cmd,cap-&gt;cmd); old_vi_cmd = (int)cap-&gt;cmd; } if...

    222019321062074_冯春霖_Lab74

    实验旨在让学生深入理解进程同步的概念,掌握Linux系统和pthread库提供的同步机制,特别是互斥锁(mutex lock)的使用,并能运用互斥锁解决实际的同步问题。同时,要求学生了解互斥锁在C语言中通过内联汇编的实现。 ...

Global site tag (gtag.js) - Google Analytics