- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 pthreads 库来尝试实现带有监视器的读取器/写入器应用程序。
我通过以下方式在 main 中调用我的线程函数
pthread_t *tid;
tid = (pthread_t*)malloc(sizeof(pthread_t)*(r + w));
int addr = 0;
//Create r # readers
for (int a = 0; a < r; a++)
{
pthread_create(&tid[addr], NULL, Reader, (void*)&a);
addr++;
}
然后他们通过以下3个函数调用完成他们的功能
void *Reader(void *pid)
{
static int *id = (int*)pid;
for (int i = 0; i < 10; i++)
{
beginRead(id);
endRead();
#ifdef __unix
usleep(R);
#endif
#ifdef _WIN32
Sleep(R);
#endif
}
return 0;
}
void beginRead(int *id)
{
//If writelock or writer_queued then wait(canRead)
pthread_mutex_lock(&writelock);
while (writer_queued)
{
reader_queued = true;
pthread_cond_wait(&canRead, &writelock);
reader_queued = false;
}
readers++;
pthread_mutex_unlock(&writelock);
pthread_mutex_lock(&output);
time_t t = time(0);
struct tm * now = localtime(&t);
fprintf(outputfile, "DB value read =:%d:%d by reader number: %d\n", now- >tm_sec, (now->tm_sec) / 1000, (int)*id);
printf("DB value read =:%d:%d by reader number: %d\n", now->tm_sec, (now->tm_sec)/1000, (int)*id);
pthread_mutex_unlock(&output);
pthread_cond_broadcast(&canRead);
}
void endRead()
{
--readers; // just finished a reader
if (readers == 0)
{
pthread_cond_signal(&canWrite);
}
}
这应该使每个线程进入代码的关键部分 10 次(因此,如果创建了 2 个线程,它将访问关键部分 20 次)我让线程访问代码的关键部分正确的次数,我只是无法让它打印正确的线程 ID#
所以如果我用 r=2 和 R=200 调用这个函数,我的输出将是:
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
当它应该是类似的东西
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number:1
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
DB value read =:30:0 by reader number: 2
取决于每个线程访问临界区的时间
最佳答案
代码将相同的地址(a
的地址)传递给每个线程。
您想向每个线程传递一个单独的地址。
您可以像这样执行此操作:
struct thread_info
{
pthread_t tid;
int id;
}
...
struct thread_info * pti = malloc((r + w) * sizeof *pit);
size_t addr = 0;
//Create r # readers
for (int a = 0; a < r; a++)
{
pti[addr]->id = a;
pthread_create(&pti[addr]->tid, NULL, Reader, &pti[addr]->id);
addr++;
}
<小时/>
还有这一行
--readers; // just finished a reader
并发访问readers
不 protected 。
关于c - 带显示器的读写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47233418/
我的问题很简单,我相信我只是遗漏了一些小东西,但我不知道它是什么。 我知道如何使用 GraphicsEnvironment、GraphicsConfiguration 和 GraphicsDevice
我目前正在使用一台机器,它的两侧有 2 个显示器。它有一个类似操纵杆的 4 个按钮,用于控制中央机械手的运动。它们都显示相同的屏幕,即显示 1 在第二个屏幕上重复显示。它们都是触摸屏。我希望它们根据用
虽然容器应该具有连接到显示器所需的权限,但我每次都收到此错误: docker exec -it my_container /# rqt QStandardPaths: XDG_RUNTIME_DIR
有没有办法通过 OS X 中的终端获取有关连接的显示器和显示器及其分辨率的信息? 我有一些安装在多台显示器上运行,有时如果没有连接显示器,GFLW 窗口似乎无法打开 - 我想检查显示器是否正确连接,并
本质上,我要完成的是让一个矩形显示器侧向(垂直方向),Android 显示屏处于纵向位置。由于显示器的限制,在显示器本身上旋转显示是不可行的。首先我设置禁用自动旋转,然后将其设置为纵向模式。 adb
我一直在思考一个我想开发的项目的可行性,我不知道是否可行。我想要的是一台标准的 Linux 计算机,当另一台机器通过 USB 插入它时,让它像 USB 显示器一样工作; IE。如果我用标准 USB 线
在 Windows 中,我们有关于我们的 Monitros 的信息——一些唯一的名称和 ID。例如 宏碁 xxx 三星xxx 我对如何在 C# 中获取信息有疑问,因为我知道我们可以从 WMI 获取序列
如何检测笔记本电脑/上网本中插入的显示器并在检测到后启用克隆显示 View ? 非常感谢 最佳答案 您可以使用 EnumDisplaySettingsEx() 这是类似的问题:How do I ena
我有一个使用 AWT 的 Java 程序,我想在 headless 系统上运行它。该程序的显示除了显示统计信息外什么都不做。当程序完成时,它退出。显示屏上没有用户交互。该程序创建了一个我在构建系统中使
我发现了很多关于 Retina Display 的问题,但没有一个答案在服务器端。 我想根据屏幕提供不同的图像,例如(在 PHP 中): if( $is_retina) $thumbnail
我在一个容器中显示多个 DIV,我希望它们在右侧没有更多空间时换行。它在 IOS 上运行良好,但我无法使其在 Android 上运行... -webkit-flex-wrap: wrap; -moz-
我在本地计算机上运行 matlab,并从 Java 调用以下函数(在 tomcat Web 服务器中运行): function df = getFig(file) f = openfig(fi
我想开发一个使用两个屏幕来显示信息的 Android 应用程序。例如:一个屏幕显示应用程序,另一个屏幕显示有关当前应用程序状态的一些信息。 我的问题:android 是否支持两个显示器/屏幕?您将如何
我想编写一个 Python 程序,自动查找和识别连接到我的计算机 (Windows) 的多个显示设备。此外,我还想以编程方式在其中一个设备中启动显示 session (例如幻灯片放映)。知道如何做到这
所以我的 Vista 机器设置为在 10 分钟后关闭显示器。 (注意:机器没有挂起或休眠) 我有一个 .Net 应用程序正在运行,它需要在指定时间“唤醒”系统。作为人类,您只需移动鼠标或按下一个键。我
如何校准 Mac 显示器以匹配 iPhone 的颜色? iPhone 的 Gamma 值是多少? 谢谢。 最佳答案 根据this article ,gamma 为 1.8,这就是 Mac OSX Le
有没有办法用 cocoa 禁用屏幕保护程序和显示器 sleep ? 最佳答案 OSX 10.8 中已弃用 UpdateSystemActivity(OverallAct) 的使用。 现在推荐的方法是通
我正在尝试将 wkhtmltopdf 与 Django、nginx、uwsgi 一起使用 它在使用 manage.py runserver 运行的开发环境中完美运行 但是当与 nginx ans uw
我正在使用 xmonad(具有最小配置,main = xmonad gnomeConfig{ modMask = mod4Mask,terminal = "gnome-terminal"}),我的计算
直接写入帧缓冲区不再有效。无论如何要写入 NDK 中的显示器?我可能会使用 ANativeWindow 但这需要一个现有的表面。有没有更好的办法?或者是在本地创建表面然后使用 ANativeWindo
我是一名优秀的程序员,十分优秀!