개발자_이훈규
천천히, 빠르게. 개발자의 Repository
개발자_이훈규
전체 방문자
오늘
어제
  • 분류 전체보기 (473)
    • 티스토리 (4)
    • 개발자 뉴스 (2)
    • 소프트웨어 (203)
      • C (7)
      • c++ (25)
      • Objective-C (3)
      • Do it! 반응형 웹디자인 (4)
      • openGL (8)
      • Java (24)
      • Jni (3)
      • Android (9)
      • Wordpress (2)
      • 버그 만난 후 느낀점 (2)
      • Git (3)
      • node js (2)
      • window tablet (1)
      • HTML (3)
      • javascript (3)
      • perl (1)
      • AngularJS (0)
      • JSON (0)
      • Docker (3)
      • python (5)
      • jQuery (1)
      • MFC (4)
      • cocos studio (6)
      • Golang (1)
      • SQLite3 (0)
      • Spring Boot (8)
      • thymeleaf (0)
      • Django (0)
      • iOS (3)
      • skia (0)
      • VBA (0)
      • PHP (2)
      • Oracle (1)
      • JSP (0)
      • R (0)
    • TCP IP (2)
    • 금융 (0)
      • 금융 Study (0)
      • 금융 Archive (0)
      • 금융 Article (0)
    • 개인 프로젝트 (7)
      • gif 홈페이지 만들기 (0)
      • study app만들기 (0)
      • 크롤러 만들기 (1)
      • 카툰 홈페이지 만들기 (1)
      • 외주 홈페이지 만들기 (3)
      • 웹 홈페이지 만들기 (0)
      • 미디어 서버 만들기 (0)
      • 소개팅 어플 만들기 (0)
      • 인스타그램 풀스택 클론 코딩(인강 노트) (0)
      • 주식 모의거래 만들기 (1)
    • html php mysql (0)
    • node.Js (2)
    • 일상 (2)
    • 빈공간 uml 공부 (0)
    • Ubuntu(linux) (12)
    • 맥OS (10)
      • android 설치하기 (2)
    • Programming quizzes (0)
    • IoT (구 유비쿼터스) (16)
      • 라즈베리 파이 (11)
      • 아두이노 (5)
    • 하드웨어 (5)
      • 아수스 비보탭 노트8 asus vivotap no.. (2)
      • 크레마 카르타 (3)
    • 분석할 문장, 구문, 코드 (0)
    • 키보드 (1)
      • 해피해킹 (1)
    • 코드 라이언 (0)
    • 전자기기 (4)
    • Ted (0)
    • NAS (0)
    • 알고리즘 (0)
    • 연합인포맥스 (0)
    • 이벤트 응모함 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 설명
  • 방법
  • 우분투
  • 코드
  • C++
  • GIT
  • install
  • 라즈베리 파이
  • error
  • ubuntu
  • 소스
  • 예제
  • 에러
  • Java
  • CODE
  • Python
  • 개발
  • Example
  • C
  • 설치

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자_이훈규

천천히, 빠르게. 개발자의 Repository

소프트웨어

[c++] 스택에 저장된 곳을 다른 함수가 주소를 받아서 사용할 수 있을까?

2014. 2. 14. 12:10

1.

코드로 실험해보기로 한다.



2.


아래 코드와 같다.



#include <stdio.h>                                                              

#include <pthread.h>                                                            

                                                                                

void pass(pthread_mutex_t *pMutex) {                                            

                                                                                

    printf("pass : %p\n", pMutex);                                              

                                                                                

}                                                                               

                                                                                

int main(int argc, char *argv[]) {                                              

                                                                                

    pthread_mutex_t m_mutex;                                                    

    printf("main : %p\n", &m_mutex);                                            

                                                                                

    pass(&m_mutex);                                                             

                                                                                

    return 0;                                                                   

} 



결과

main : 0xbf9a5d64

pass : 0xbf9a5d64


두개가 동일한 주소를 가리키고 있다.



3. 
그러면 조작도 가능할까?


#include <stdio.h>                                                              

#include <pthread.h>                                                            

                                                                                

void pass(pthread_mutex_t *pMutex) {                                            

                                                                                

    printf("pass : %p\n", pMutex);                                              

    pthread_mutex_unlock(pMutex);                                               

                                                                                

}                                                                               

                                                                                

int main(int argc, char *argv[]) {                                              

                                                                                

    pthread_mutex_t m_mutex;                                                    

    printf("main : %p\n", &m_mutex);                                            

                                                                                

    pthread_mutex_lock( &m_mutex);                                              

    pass(&m_mutex);                                                             

                                                                                

    return 0;                                                                   

} 


이것도 위와 동일하게 잘 작동한다.

그러면 함수에 할당한 후 사용해보자.



4.


할당 한 후에 사용하는것이 가능할까, 

아래의 경우에선 잘 끝났다. 하지만! 한번  lock을 두번 걸어서 deadlock상황을 만들어보자. 이래야 두개가 동일한 값을 가리키고 있다는게 확실하니깐.

#include <stdio.h>                                                              

#include <pthread.h>                                                            

                                                                                

void pass(pthread_mutex_t *pMutex) {                                            

                                                                                

    pthread_mutex_t *p_mutex;                                                   

                                                                                

    p_mutex = pMutex;                                                           

    printf("pass : %p\n", p_mutex);                                             

    pthread_mutex_unlock(p_mutex);                                              

                                                                                

}                                                                               

                                                                                

int main(int argc, char *argv[]) {                                              

                                                                                

    pthread_mutex_t m_mutex;                                                    

    printf("main : %p\n", &m_mutex);                                            

                                                                                

    pthread_mutex_lock( &m_mutex);                                              

    pass(&m_mutex);                                                             

                                                                                

    return 0;                                                                   

} 



5.

두개의 lock을 걸었는데 잘 끝난다.. 망했다. 확인해봐야한다.

어쨋든 내 예상이 맞았다. 내 프로그램에 이 부분이 에러였다.


#include <stdio.h>                                                              

#include <pthread.h>                                                            

                                                                                

void pass(pthread_mutex_t *pMutex) {                                            

                                                                                

    pthread_mutex_t *p_mutex;                                                   

                                                                                

    p_mutex = pMutex;                                                           

    printf("pass : %p\n", p_mutex);                                             

    pthread_mutex_lock(p_mutex);                                                

                                                                                

}                                                                               

                                                                                

int main(int argc, char *argv[]) {                                              

                                                                                

    pthread_mutex_t m_mutex;                                                    

    printf("main : %p\n", &m_mutex);                                            

                                                                                

    pthread_mutex_lock( &m_mutex);                                              

    pass(&m_mutex);                                                             

                                                                                

    return 0;                                                                   

} 



6.

아니다. main에서 lock을 두번 연속으로 하니깐 잘 끝나더라. 결론은 아무 이상 없다.


ps. 나중에 발견한건데 이 부분은 문제가 없고 multi thread의 create되어 시작되는 부분이 문제가 생긴거였다.

저작자표시 비영리 (새창열림)

'소프트웨어' 카테고리의 다른 글

[zlib] zlib에 대해서 (1)  (0) 2014.02.18
[c++] pointer로 선언 후에 pointer를 그대로 넘겨서 pointer에 담아 사용하기  (0) 2014.02.14
[c++] 상속이란 무엇인지는 아는데, 어떻게 쓰는 것인가?  (0) 2014.02.13
[c언어] thread의 상태를 확인해보자  (0) 2014.02.11
[linux] 파일 디스크립터 테이블  (2) 2014.02.07
    '소프트웨어' 카테고리의 다른 글
    • [zlib] zlib에 대해서 (1)
    • [c++] pointer로 선언 후에 pointer를 그대로 넘겨서 pointer에 담아 사용하기
    • [c++] 상속이란 무엇인지는 아는데, 어떻게 쓰는 것인가?
    • [c언어] thread의 상태를 확인해보자
    개발자_이훈규
    개발자_이훈규
    혼자 꽁양꽁양 개발하면서 놀아요~ - 노트같은 블로그

    티스토리툴바