线程同步:
1.互斥锁
2.读写锁
3.条件变量
4.信号量
5.自旋锁
6.屏障(barrier)
进程同步:
1.互斥锁
2.读写锁
3.条件变量
4.记录锁(record locking)
5.信号量
6.屏障(barrier)
-pthread Adds support for multithreading with the pthreads library. This option sets flags for both the preprocessor and linker.
pthread是linux下的线程库,用了多线程就要链接这个库,这时候要在编译选项上增加-pthread或者-lpthread
-pthread选项对 预处理器和链接器起作用
而老式的-lpthread只对链接器起作用
推荐使用-pthread
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <unistd.h>
using namespace std;
#define NUM_THREADS 5
void *wait(void *t)
{
int i;
long tid;
tid = (long)t;
sleep(1);
cout << "Sleeping in thread " << endl;
cout << "Thread with id : " << tid << " ...exiting " << endl;
pthread_exit(NULL);
}
int main ()
{
int rc;
int i;
pthread_t threads[NUM_THREADS];
pthread_attr_t attr;
void *status;
// 初始化并设置线程为可连接的(joinable)
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
for( i=0; i < NUM_THREADS; i++ ){
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL, wait, (void *)&i );
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
// 删除属性,并等待其他线程
pthread_attr_destroy(&attr);
for( i=0; i < NUM_THREADS; i++ ){
rc = pthread_join(threads[i], &status);
if (rc){
cout << "Error:unable to join," << rc << endl;
exit(-1);
}
cout << "Main: completed thread id :" << i ;
cout << " exiting with status :" << status << endl;
}
cout << "Main: program exiting." << endl;
pthread_exit(NULL);
}