笔者:YY同学
进程和线程的区别
线程内存的共享与不共享
- 共享:堆内存、全局变量(包括 BSS 和 Data Segment)、代码块和常量
- 不共享:栈内存(各个线程的 local variable 不共享,自己用自己的)
两种线程模式
- 多对一模式(Many-to-One)
- 一对一模式(One-to-One Model)
线程创建
void * hello( void *input ) {
printf(“%s\n”, (char *) input);
pthread_exit(NULL);
}
int main(void) {
pthread_t tid;
pthread_create(&tid, NULL, hello, “hello world”);
pthread_join(tid, NULL);
return 0;
}
线程锁
伪代码
while(TRUE) {
pthread_mutex_lock(&mutex);
if(shared < MAXIMUM)
shared++;
else {
pthread_mutex_unlock(&mutex);
break;
}
pthread_mutex_unlock(&mutex);
sleep(rand() % 2);
}
线程同步函数
生产者-消费者模型 伪代码
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t full = PTHREAD_COND_INITIALIZER;
pthread_cond_t empty = PTHREAD_COND_INITIALIZER;
void *producer(void *nothing) {
while(TRUE) {
pthread_mutex_lock(&mutex);
if( buffer is full ) {
printf("Producer: FULL\n");
pthread_cond_wait(&full, &mutex); // wait on "full"
}
produce an item;
if(buffer is previously full) {
pthread_cond_signal(&empty); // signal on "empty"
}
pthread_mutex_unlock(&mutex);
}
}