0 0

多线程锁不起作用?5

刚学多线程,然后有个实验到程序,不知道啥原因,这个锁始终无效。求解答。
/*
 ============================================================================
 Name        : pthread.c
 Author      : wqj
 Version     :
 Copyright   : 
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
volatile long int sum = 0;
void *init_1(void *arg)
{

	int i=0;
	pthread_mutex_t sum_lock;
	if(pthread_mutex_init (&sum_lock, NULL)!=0){
		printf("Error\n");
		exit(0);
	}

	while (i !=1000000){
/*锁住再释放,但是sum的值仍然不确定*/
		if(pthread_mutex_lock (&sum_lock)!=0){
			printf("Error\n");
			exit(0);
		}
		sum++;
		i++;
		if (pthread_mutex_unlock(&sum_lock) !=0){
			printf("Error\n");
			exit(0);
		}
	}
	pthread_mutex_destroy (&sum_lock);
	return (void*)0;
}

int main(void) {
	pthread_t tid1,tid2;
	puts("thread"); /* prints thread */
	if (pthread_create(&tid1, NULL, init_1, (void *)1000000) != 0){
		printf("Error\n");
	}
	if (pthread_create(&tid2, NULL, init_1, (void *)1000000) != 0){
		printf("Error\n");
	}
	pthread_join (tid1,NULL);
	pthread_join(tid2, NULL);
	printf("%ld\n",sum);

	return EXIT_SUCCESS;
}
2011年4月27日 22:03
目前还没有答案

相关推荐

    java多线程之并发锁

    Java 中的多线程编程需要充分考虑线程安全和锁机制的问题,否则可能会导致程序的执行不稳定和崩溃。Lock 机制是 Java 中的一种重要的线程同步机制,它可以用来实现线程安全和提高程序的执行效率。

    多线程锁的解释范例

    线程锁的主要作用就是解决这种并发问题。在Java中,我们可以使用`synchronized`关键字来实现线程锁。当一个线程进入`synchronized`代码块或方法时,其他试图进入的线程将会被阻塞,直到当前线程执行完毕并释放锁。 ...

    C++实现线程锁

    在多线程编程中,线程锁是一种同步机制,用于控制对共享资源的访问,以避免数据竞争和其他并发问题。C++标准库提供了一系列的线程同步原语,包括互斥量(mutex)、条件变量(condition_variable)、信号量...

    java多线程和锁,用于学习参考

    Java多线程与锁是Java并发编程中的核心概念,它们在构建高效、可扩展的并发应用程序中起着至关重要的作用。下面将详细讲解这两个主题。 首先,Java中的多线程是指程序执行时可以同时进行多个任务。这得益于操作系统...

    线程和线程锁的使用源码例子

    总结起来,线程和线程锁在多线程编程中起着至关重要的作用。正确理解和使用它们可以提高程序的并发性能,同时避免数据竞争和死锁等问题。通过Windows API或C++标准库提供的工具,我们可以方便地在C++中实现线程和...

    多线程死锁,活锁,竞争锁问题总结

    - **减小锁作用域**:尽可能减少锁的使用范围,缩短线程持有锁的时间。 #### 六、总结 多线程编程是现代软件开发中不可或缺的一部分,但同时也带来了诸如死锁、活锁和竞争锁等问题。理解这些问题的根本原因及其...

    MFC Opengl多线程框架

    为了将这些代码应用到自己的项目中,你需要理解每个函数的作用,如何初始化和销毁线程,以及如何在多线程环境中正确使用OpenGL。 多线程编程还涉及到错误处理和调试。由于线程间的异步行为,错误可能在任何时刻出现...

    .Net 多线程详解

    .doc 格式 详细解析多线程技术 基础篇 • 怎样创建一个线程 • 受托管的线程与 Windows线程 • 前台线程与后台线程 • 名为BeginXXX和EndXXX的方法是做什么用的 • 异步和多线程有什么关联 WinForm多线程编程...

    个人总结40个Java多线程面试问题和答案

    下面是40个Java多线程面试问题和答案的总结,涵盖了多线程的基本概念、线程创建、线程同步、线程安全、volatile关键字的作用等方面的知识点。 1. 多线程有什么用? 多线程可以发挥多核CPU的优势,防止阻塞,简化...

    Qt两种方法实现多线程并安全结束线程及QMutex加锁Qt单例化实现

    - **QMutex在多线程通信中的作用**:在子线程更新UI或其他共享数据结构时,QMutex可防止竞态条件,保证数据一致性。 3. **Qt单例化实现**: - **Qt的单例设计模式**:通常使用静态成员函数配合私有构造函数实现...

    python多线程同步之文件读写控制

    总结来说,Python中的多线程同步在文件读写控制中起到关键作用,防止数据不一致和错误。通过使用`threading.Lock`,我们可以确保在读写文件时只有一个线程在执行,从而保证了数据的正确性和文件操作的顺序。在多线程...

    c# 多线程 上位机

    总结,C#的多线程技术和模拟消息队列在上位机开发中起着至关重要的作用,它们能够优化性能,提高系统的响应速度,并为复杂任务的管理提供有效手段。理解并熟练运用这些技术,是成为一名合格的C#上位机开发者的关键。

    多线程和网络编程

    在IT领域,多线程和网络编程是两个关键的概念,它们在构建高性能、高并发的系统中发挥着至关重要的作用。 多线程是指在一个进程中同时执行多个线程,每个线程独立地执行任务,共享同一内存空间。这种设计模式允许...

    多线程列子多线程列子多线程列子

    为了保证线程安全,多线程编程中需要使用锁(如互斥锁、读写锁)、信号量、条件变量等同步机制。此外,线程间的通信可以通过共享内存、消息队列、管道等方式实现。 六、死锁与活锁问题 在多线程环境中,可能会出现...

    QT中sqlite多线程操作4个注意问题

    ### QT中sqlite多线程操作4个注意问题 在开发基于Qt的应用程序时,经常会遇到需要使用多线程来进行SQLite数据库操作的情况。然而,多线程环境下的数据库操作相较于单线程来说更为复杂,需要特别注意一些细节问题,...

    多线程编程指南.pdf

    多线程编程是现代软件开发不可或缺的一部分,它不仅可以显著提升程序性能,还能改善用户体验。然而,多线程编程也带来了诸如数据竞争、死锁等挑战,需要开发者仔细设计和测试,以确保程序的稳定性和可靠性。通过深入...

    多线程编程指南PDF

    ### 多线程编程指南知识点总结 #### 一、多线程基础介绍 - **定义多线程术语**: - **线程**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 - **多线程**:指的是...

    多线程与循环队列

    在计算机科学中,多线程和循环队列是两个重要的概念,它们在高效并发编程中发挥着关键作用。本文将详细探讨多线程环境下的循环队列应用。 首先,我们来理解多线程。多线程是一种编程模型,允许一个程序同时执行多个...

    LabWindows/CVI中多线程技术的应用与优化

    内容概要:本文详细介绍了LabWindows/CVI中的多线程技术,解释了多任务、多线程和多处理的概念,并强调了多线程在数据采集、仪器控制、用户界面等场景中的重要作用。文章具体探讨了多线程的应用场景,如高实时性任务...

Global site tag (gtag.js) - Google Analytics