logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

gcc thread and mutex 사용법

by lizard2019 posted Feb 27, 2019
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

// volatile 변수를 선언해서 lock으로 사용하는 예제
//volatile int lock = 0;
pthread_mutex_t lock;

int tot = 0;
void sum(int id)
{

        while(1){
            //while(lock) {
            //    usleep(100);
            //}
            //lock = 1;

            pthread_mutex_lock(&lock); // 다른 쓰레드에서 접근시 대기

            for(int i = 0; i <= 100 ; i++) {
                tot += i;
                usleep(500);
            }
            printf("thread%d = %d\n", id, tot);
            tot = 0;
            //lock = 0;
            pthread_mutex_unlock(&lock); // 다른 쓰레드에서 진행할 수 있도록 해제
            usleep(500);
        }
}

void* thread1()
{
    sum(1);
    return NULL;
}

void* thread2()
{
    sum(2);
        return NULL;
}

int main()
{
    int status;
    pthread_t tid1,tid2;

    // mutex를 사용하기 위해 초기화
    if (pthread_mutex_init(&lock, NULL) != 0)
    {
        printf("\n mutex init failed\n");
        return 1;
    }

    pthread_create(&tid1,NULL,thread1,NULL);
    pthread_create(&tid2,NULL,thread2,NULL);
    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);
    
    /// mutex 삭제
    pthread_mutex_destroy(&lock);

    return 0;
}
TAG •

List of Articles
No. Subject Author Date Views
84 LibVLC 미디어 재생기 프로그래밍 방법 C++, QT 엉뚱도마뱀 2018.04.20 2505
83 CMM / CMMI 란 무엇인가? digipine 2017.10.28 2467
82 [ubuntu, 우분투] sendmail 설치 digipine 2017.11.02 2317
81 Ubuntu Server OS 한국어 모드로 설치 후 서버 콘솔에서 한글 깨짐 해결 방법 digipine 2017.10.31 2248
80 How to FFMpeg Windows Build with msys 1.0 and MinGW_64 file lizard2019 2019.06.05 2209
79 C/C++ struct 패딩(padding) 원리 이해 lizard2019 2019.03.04 2150
78 Git Http Backend Upload Size 설정 - Http 500 Error 해결 digipine 2017.11.02 2074
77 XOR Encryption : 단순하면서도 강력한 암호/복호화 기법 digipine 2017.11.02 1737
76 대칭키 암호화관련 개념 정리 digipine 2017.11.09 1643
75 우분투 Nabi 한글 입력기 Tray(트레이) 상단 메뉴바로 옮기기 digipine 2017.11.03 1630
74 리눅스 /dev/random을 이용한 랜덤값 생성 엉뚱도마뱀 2017.11.22 1556
73 MacOS 10.12.2 (OSX) 보안 취약점 공격 코드 2 file digipine 2017.11.02 1556
72 Ubuntu 16 에 mysql 5.7 설치 및 원격 설정 file digipine 2017.11.08 1484
71 MacOS 10.12.2 (OSX) KERNEL DEBUGGING file digipine 2017.11.02 1472
70 [Qt] QSettings 클래스의 설명과 사용법, 설정 저장위치 digipine 2017.11.02 1470
69 How to Build FFMpeg for LAVFilters file lizard2019 2019.06.05 1449
68 Ubuntu 16 에 JAVA 1.7.0 jdk 설치 하기 digipine 2017.11.07 1417
67 Docker에서 Phabricator 최신버전 설치 및 버전 확인 방법 file lizard2019 2021.04.15 1403
66 IPv6 프로그래밍 가이드 digipine 2017.11.02 1350
65 윈도우즈 도스 커멘드(Command) 네트워크 관련 명령어 lizard2019 2019.02.07 1342
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6