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
#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 |