t**r 发帖数: 3428 | 1 You have two threads one printing even numbers in order and other odd
numbers. Design an algorithm so that it prints numbers in natural order
#include
#include
pthread_mutex_t mlock=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
int flag=0;
void *EVEN(void *param);
void *ODD(void *param);
int main()
{
pthread_t etid,otid;
pthread_create(&etid,NULL,EVEN,NULL);
pthread_create(&otid,NULL,ODD,NULL);
pthread_exit(NULL);
}
void *EVEN(void *param)
{
int x=0;
int i;
for(i=0;i<20;i++)
{
pthread_mutex_lock(&mlock);
if(flag==1)
pthread_cond_wait(&cond,&mlock);
printf("%d ",x);
x=x+2;
flag=1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mlock);
}
}
void *ODD(void *param)
{
int x=1;
int i;
for(i=0;i<20;i++)
{
pthread_mutex_lock(&mlock);
if(flag==0)
pthread_cond_wait(&cond,&mlock);
printf("%d ",x);
x=x+2;
flag=0;
pthread_mutex_unlock(&mlock);
pthread_cond_signal(&cond);
} | m*****n 发帖数: 2152 | 2 试着运行一下的你的code,发现不能打印出必要信息。
改了一下,就可以了。
#include
#include
pthread_mutex_t mlock=PTHREAD_MUTEX_INITIALIZER;
int count=0;
void *EVEN(void *param);
void *ODD(void *param);
int main()
{
pthread_t etid,otid;
pthread_create(&etid,NULL,EVEN,NULL);
pthread_create(&otid,NULL,ODD,NULL);
pthread_exit(NULL);
}
void *EVEN(void *param)
{
while(count<20)
{
pthread_mutex_lock(&mlock);
if(count%2==0)
{
printf("%d ", count);
count++;
}
pthread_mutex_unlock(&mlock);
}
}
void *ODD(void *param)
{
while(count<20)
{
pthread_mutex_lock(&mlock);
if(count%2==1)
{
printf("%d ", count);
count++;
}
pthread_mutex_unlock(&mlock);
}
} | w********s 发帖数: 1570 | 3 use std11
std::thread, mutex, scoped_lock, etc
【在 m*****n 的大作中提到】 : 试着运行一下的你的code,发现不能打印出必要信息。 : 改了一下,就可以了。 : #include : #include : pthread_mutex_t mlock=PTHREAD_MUTEX_INITIALIZER; : int count=0; : void *EVEN(void *param); : void *ODD(void *param); : int main() : {
| m*****n 发帖数: 2152 | 4 据说c++11的thread不支持优先级,是不是真的?
而且,现在posix已经很流行了,支持很广了,用c++11 thread不好找工作吧。
【在 w********s 的大作中提到】 : use std11 : std::thread, mutex, scoped_lock, etc
| w********s 发帖数: 1570 | 5 可移植性,代码可维护性,比pthread强多了
【在 m*****n 的大作中提到】 : 据说c++11的thread不支持优先级,是不是真的? : 而且,现在posix已经很流行了,支持很广了,用c++11 thread不好找工作吧。
| m*****n 发帖数: 2152 | 6 这个我承认,pthread的C程序,看的都头晕。如果有选择,我宁愿用C++11的thread,
可惜,就怕不好找工作。
【在 w********s 的大作中提到】 : 可移植性,代码可维护性,比pthread强多了
| m**p 发帖数: 189 | 7 你很谦虚, 你的code比他好了不止一点。
但是思路是一样的, 就是lock the count
如果一个thread多次进入, 就有一些问题。
为什么不试试 event, conditional variable?
【在 m*****n 的大作中提到】 : 试着运行一下的你的code,发现不能打印出必要信息。 : 改了一下,就可以了。 : #include : #include : pthread_mutex_t mlock=PTHREAD_MUTEX_INITIALIZER; : int count=0; : void *EVEN(void *param); : void *ODD(void *param); : int main() : {
|
|