뮤텍스 예제에서 질문이여

qoqkwl6593의 이미지

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
 
struct account{
        int balance;
        pthread_mutex_t mutex;
};
 
void *disburse_money(int amout)
{
}
 
 
int withdraw(struct account *account, int amount)
{
 
        pthread_mutex_lock(&(account->mutex));
        const int balance = account->balance;
        if(balance < amount){
                pthread_mutex_unlock(&account->mutex);
                return -1;
        }
 
        account->balance = balance - amount;
        pthread_mutex_unlock(&(account->mutex));
 
        printf("%d\n", account->balance);
        disburse_money(amount);
 
        return 0;
}
 
int main()
{
        struct account abcd;
        abcd.balance = 10000;
        abcd.mutex = PTHREAD_MUTEX_INITIALIZER;
 
        withdraw(&abcd, 5000);
        return 0;
}

현재 코드에서 보면은 구조체 abcd를 만들어서 구조체안에 mutex를 만들었습니다.
그런데 그부분에서 abcd구조체에서 집적
abcd.mutex를 초기화 시키려고 했는데 그부분을 초기화시키려고 하면 에러 현상이나서....
그냥 mutex를 초기화 시킬때는 전혀나지 않는 현상인데...
왜그런가여???

그리고 실제로도 구조체안에서 mutex를 써야할필요가 있는 소스라...
그게 구현이 안되는 건가여?
ERROR
mutex.c: In function ‘main’:
mutex.c:44: error: expected expression before ‘{’ token

yhsuk의 이미지

PTHREAD_MUTEX_INITIALIZER는 선언하면서 초기화할 때 사용합니다.

#define PTHREAD_MUTEX_INITIALIZER {0, 0, -1, -1, -1}

이런식으로 선언되어 있습니다.

아래 두 개의 방법 중 한가지를 선택하시면 됩니다.

int main()
{
        struct account abcd = { 10000, PTHREAD_MUTEX_INITIALIZER };
        //abcd.balance = 10000;
        //abcd.mutex = PTHREAD_MUTEX_INITIALIZER;
 
        withdraw(&abcd, 5000);
        return 0;
}

int main()
{
        struct account abcd;
        abcd.balance = 10000;
        pthread_mutex_init(&abcd.mutex, NULL); 
        //abcd.mutex = PTHREAD_MUTEX_INITIALIZER;
 
        withdraw(&abcd, 5000);
        return 0;
}

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"

qoqkwl6593의 이미지

답변 감사합니다ㅎㅎ..
생각의 범위를 넓혀야겠다고 또한번 생각하게되는군여..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.