参考自: http://www.cnblogs.com/hnrainll/archive/2011/04/22/2025225.html
#include <pthread.h>
#include <stdio.h>
#include <string.h>
pthread_mutex_t pattr;
void* func(void* arg){
pthread_mutex_lock(&pattr);
char* str = (char*)arg;
while(*str != '\0'){
fputc(*str, stdout);
str++;
}
fputc('\n', stdout);
pthread_mutex_unlock(&pattr);
}
int main(){
pthread_mutex_init(&pattr, NULL);
pthread_t p1, p2;
char str1[8], str2[8];
sprintf(str1, "abcdefg");
sprintf(str2, "1234567");
int ret;
if((ret = pthread_create(&p1, NULL, func, str1)) != 0){
fprintf(stderr, "create thread error. msg:%s", strerror(ret));
}
if((ret = pthread_create(&p2, NULL, func, str2)) != 0){
fprintf(stderr, "create thread error. msg:%s", strerror(ret));
}
pthread_join(p1, NULL);
pthread_join(p2, NULL);
}
分享到:
相关推荐
1. `pthread_mutex_init()`: 初始化一个互斥锁对象,需要指定互斥锁的属性,如是否可重入、公平性等。 2. `pthread_mutex_lock()`: 当线程需要访问共享资源时,调用此函数锁定互斥锁。如果锁已经被其他线程持有,...
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; static int data_ready = 0; // 生产者线程 void* producer(void* arg) { // 生产数据... ...
具体来说,`pthread_mutex_t`类型表示一个互斥锁对象,可以通过`pthread_mutex_init()`初始化,`pthread_mutex_lock()`锁定,`pthread_mutex_unlock()`解锁。在消费者和生产者之间,通常会有一个共享资源(如缓冲区...
4. `pthread_mutex_t` 和 `pthread_mutex_init() / pthread_mutex_lock() / pthread_mutex_unlock() / pthread_mutex_destroy()`:互斥锁,用于保证同一时刻只有一个线程访问特定资源,防止数据竞争。 5. `pthread_...
int ret = pthread_mutex_init(&mutex, NULL); if (ret != 0) { // 错误处理 } ``` 3. 在需要保护的代码段之前,调用`pthread_mutex_lock()`获取锁。 ```c ret = pthread_mutex_lock(&mutex); if (ret != 0) { /...
1. 互斥锁:通过`pthread_mutex_init()`、`pthread_mutex_lock()`和`pthread_mutex_unlock()`来初始化、锁定和解锁互斥锁,确保同一时间只有一个线程能访问临界区。 2. 条件变量:允许线程在满足特定条件时挂起,当...
`pthread_mutex_t`是POSIX线程库中的互斥锁类型,可以使用`pthread_mutex_init`初始化,`pthread_mutex_lock`获取锁,`pthread_mutex_unlock`释放锁。 2. **条件变量**:条件变量允许线程等待某个特定条件满足后再...
pthread-win32是pthread库的一个移植版本,它为Windows操作系统提供了与Posix线程兼容的API,使得C和C++开发者能够在Windows上使用pthread相关的函数,如`pthread_create`、`pthread_join`、`pthread_mutex_lock`等...
例如,`pthread_create()`用于创建新的线程,`pthread_join()`用于等待线程结束,`pthread_mutex_t`和`pthread_mutex_lock()`、`pthread_mutex_unlock()`用于互斥锁,保证资源的安全访问,`pthread_cond_t`和`...
- **互斥量**(Mutex):`pthread_mutex_t`是互斥量类型,`pthread_mutex_init()`和`pthread_mutex_destroy()`用于初始化和销毁互斥量,`pthread_mutex_lock()`和`pthread_mutex_unlock()`用于锁定和解锁,防止多个...
使用方法 pthread_mutex_init(&mutex,NULL)。函数成功返回 0,失败返回非 0。 第二步:对互斥量进程上锁,使用 pthread_mutex_lock() 函数,函数原型如下: ```c int pthread_mutex_lock(pthread_mutex_t *mutex); ...
在 main 函数中,我们创建了两个线程 pthread1 和 pthread2,并使用 pthread_mutex_init 函数初始化 mutex 对象。 在 pthread1 函数中,我们使用 while 循环不断地卖出票,并使用 pthread_mutex_lock 函数锁定 mutex...
通过本次实验,我们掌握了互斥型信号量的使用和读者-写者问题的解决方法,了解了 pthread_mutex_init、pthread_mutex_unlock 和 pthread_mutex_lock 函数的使用,并且熟悉了操作互斥锁的几个函数。 此外,我们也...
1. 初始化:`pthread_mutex_init()`用于初始化Mutex。 2. 加锁:`pthread_mutex_lock()`将Mutex锁定,如果已被其他线程锁定,则当前线程会被挂起。 3. 尝试加锁:`pthread_mutex_trylock()`尝试加锁,如果锁已存在,...
1. 初始化互斥锁:使用pthread_mutex_init()函数初始化一个互斥锁,设置其属性。通常,无需特殊属性,直接使用默认值即可。 2. 加锁与解锁:在访问共享资源之前,使用pthread_mutex_lock()函数尝试获取锁。如果锁已...
1. 互斥锁(Mutex):`pthread_mutex_t`类型的数据结构,用于保护临界区,防止多个线程同时访问共享资源。 2. 条件变量(Condition Variable):`pthread_cond_t`,配合互斥锁实现线程间的同步等待和唤醒。 3. 读写...
在Linux中,互斥锁通过`pthread_mutex_t`类型表示,并通过`pthread_mutex_init`初始化,`pthread_mutex_lock`锁定,`pthread_mutex_unlock`解锁。当一个进程获取了互斥锁后,其他试图获取该锁的进程将被阻塞,直到锁...
- **互斥量(Mutex)**:`pthread_mutex_t`是互斥锁类型,通过`pthread_mutex_init()`初始化,`pthread_mutex_lock()`锁定,`pthread_mutex_unlock()`解锁,确保同一时间只有一个线程访问临界区。 - **条件变量...
2. **创建互斥锁**:使用`pthread_mutex_init()`函数初始化一个互斥锁变量。这通常在程序启动时进行。 ```c pthread_mutex_t mutex; pthread_mutex_init(&mutex, NULL); ``` 3. **锁定和解锁**:在写入日志之前,...