我试图了解线程和信号量。
我希望编写一个包含4个线程的代码,它输出一个类似" foo dee"的字符串,但我希望线程1仅键入" f",2只键入& #34; o",线程3仅键入" e"和" d"和第四个线程只能键入空格。
我如何将线程链接起来,以便得到一个" foo dee"在屏幕上,这是他们所有人的共同工作。
我不想要一个解决方案,但我可以使用的语法示例。
感谢您的帮助。
编辑:在linux上工作
答案 0 :(得分:0)
您可以在此处找到如何创建信号量结构和创建线程:for Windows 和for Linux
你需要做的是:在主线程中创建4个线程,然后控制它们。
提示:在windows中WaitForMultipleObjects函数使当前线程等待。 ReleaseSemaphore函数释放信号量,让其他线程进入临界区..
示例代码:
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2]; sem_t mutex;
void* doSomeThing(void *arg) {
unsigned long i = 0;
pthread_t id = pthread_self();
sem_wait(&mutex); // Lock Entrance
if(pthread_equal(id,tid[0]))
{
printf("\n First thread processing\n");
}
else
{
printf("\n Second thread processing\n");
}
for(i=0; i<(0xFFFFFFFF);i++);
sem_post(&mutex); // Lock Exit
return NULL; }
int main(void) {
int i = 0;
int err; if( sem_init(&mutex,1,1) < 0)
{
perror("semaphore initilization");
exit(0);
}
while(i < 2)
{
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
else
printf("\n Thread created successfully\n");
i++;
}
sleep(5);
return 0; }
增加线程计数器以获得更多线程..
答案 1 :(得分:0)
尝试强制线程按顺序操作,就像这样打破了创建线程的目的。所有其他线程必须等待预定义的行为发生。为了实现这个目标,你必须以一种与顺序操作没有太大区别的方式来阻塞线程(然后在此基础上添加线程创建和管理的开销)
...但如果你真的想这样做,我会使用信号代替信号量。信号量和互斥量通常用于控制对共享资源的并发访问。通过强制执行顺序,确实没有共享资源可供使用。
信号背后的想法是,一个线程将等到另一个线程将其启动。看看以下功能:
pthread_cond_wait()
pthread_cond_signal()
我认为他们是获得你想要的最佳方式。