- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我现在正在上并发类(class),我已经完成了我的第一个(非常简单的)项目,现在我想让它真正有用。
在我的代码中,我在一个数组中对第二个数组的每个值进行二进制搜索。对于第二个数组中的每个值,我生成一个线程。结果证明这比顺序解决方案慢,所以我的想法是我会生成少量线程并在它们每次完成执行时向它们传递一个新 key 。
我有几个问题。第一个问题是,当没有更多键时,如何让线程退出?
如何传递新 key ?
如何让线程在等待新 key 时不使用旧 key 执行(我一直在阅读有关条件等待的内容,并认为这就是我所需要的)。
这是我当前的(无效的)解决方案。
#define ARRAYSIZE 50000
#define KEY_NOT_FOUND -1
#define KEY_FOUND 0
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
int binary_search(int *array, int key, int min, int max);
void *worker(void *arg);
int count = 0;
pthread_mutex_t L;
int l_array[ARRAYSIZE * 2];
int main(void)
{
int r_array[ARRAYSIZE];
int *p;
pthread_t *threads;
int ix = 0;
int jx = 0;
struct timeval start, stop;
double elapsed;
for(ix = 0; ix < ARRAYSIZE; ix++)
{
r_array[ix] = ix;
}
for(ix = 0; ix < ARRAYSIZE * 2; ix++)
{
l_array[ix] = ix + 2;
}
gettimeofday(&start, NULL);
threads = (pthread_t *) malloc(ARRAYSIZE * sizeof(pthread_t));
for (jx = 0; jx < ARRAYSIZE; jx++) {
p = (int *) malloc(sizeof(int));
*p = r_array[jx];
pthread_create(&threads[jx], NULL, worker, (void *)(p));
}
for (jx = 0; jx < ARRAYSIZE; jx++) {
pthread_join(threads[jx], NULL);
}
fprintf(stderr, "%d\n", count);
gettimeofday(&stop, NULL);
elapsed = ((stop.tv_sec - start.tv_sec) * 1000000+(stop.tv_usec-start.tv_usec))/1000000.0;
printf("time taken is %f seconds\n", elapsed);
return 0;
}
void* worker(void *arg)
{
int boolean = 0;
int key = *((int *) arg);
boolean = binary_search(l_array, key, 0, ARRAYSIZE * 2);
if(boolean == 1)
{
pthread_mutex_lock(&L);
count++;
pthread_mutex_unlock(&L);
}
}
int binary_search(int *array, int key, int min, int max)
{
int mid = 0;
if (max < min) return 0;
else
{
mid = (min + max) / 2;
if (array[mid] > key) return binary_search(array, key, min, mid - 1);
else if (array[mid] < key) return binary_search(array, key, mid + 1, max);
else
{
return 1;
}
}
}
最佳答案
注意:下面的代码没有经过测试,但是很简单...
r_array[]
的基地址传递给 workernext_index
pthread_mutex
PS:与线程数一样,从 2 开始,直到发现吞吐量没有差异为止。您还需要考虑所有的间接费用……
void worker(void *arg)
{
int* r_arrPtr = (int*) arg;
int boolean = 0;
int key =0;[
while (1) {
pthread_mutex_lock(&pNextIndex_MutEx);
if (next_index < ARRAYSIZE) {
key = r_arrPtr[next_index];
next_index ++;
} else {
pthread_mutex_unlock(&pNextIndex_MutEx);
return;
}
pthread_mutex_unlock(&pNextIndex_MutEx);
boolean = binary_search(l_array, key, 0, ARRAYSIZE * 2);
if (boolean == 1) {
// ....
}
}
}
关于c - 更有效的并发解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146176/
我只是想知道要安装哪个版本的 Visual Studio 2010(专业版或高级版)提示升级项目.. 项目包括:asp.net mvc、数据库和silverlight。 最佳答案 通常,由不同版本的相
几种通过 iproute2 来打通不同节点间容器网络的方式 几种通过 iproute2 来打通不同节点间容器网络的方式 host-gw ipip vxlan 背景 之前由于需
目录 前言 1、TypeHandler 简介 1.1转换步骤 1.2转换规则 2、JSON 转换 3、枚举转换 4、文章小结
目录 前言 1、常见 key-value 2、时效性强 3、计数器相关 4、高实时性 5、排行榜系列 6、文章小结 前言 在笔者 3 年的
目录 前言 四、技术选型 五、后端接口设计 5.1业务系统接口 5.2App 端接口 六、关键逻辑实现 6.1Red
目录 前言 一、需求分析 1.1发送通知 1.2撤回通知 1.3通知消息数 1.4通知消息列表 二、数据模型设计
目录 前言 一、多租户的概念 二、隔离模式 2.1独立数据库模式 2.2共享数据库独立数据架构 2.3共享数据库共享数据架构
导读: 虽然锁在一定程度上能够解决并发问题,但稍有不慎,就可能造成死锁。本文介绍死锁的产生及处理。 死锁的产生和预防 发生死锁的必要条件有4个,分别为互斥条件、不可剥夺条件、请求与保持条件和循环等待条
在浏览网页后,我找不到任何功能来执行此操作,我有可行的个人解决方案。也许它对某人有用。 **使用 Moment 插件转换日期。***moment(currentPersianDate).clone()
是否有一种解决方案可以很好地处理数字(1-10)手写?我试过tesseract,但我得到的只是垃圾。 理想情况下是 OSS,但商业也可以。 最佳答案 OpenCV 现在带有手写数字识别 OCR 示例。
在服务器应用程序上,我们有以下内容:一个称为 JobManager 的单例类。另一个类,Scheduler,不断检查是否需要向 JobManager 添加任何类型的作业。 当需要这样做时,调度程序会执
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
当您尝试从 GitHub 存储库安装某些 R 包时 install_github('rWBclimate', 'ropensci') 如果您遇到以下错误: Installing github repo
问题在以下链接中进行了描述和演示: Paul Stovell WPF: Blurry Text Rendering www.gamedev.net forum Microsoft Connect: W
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
已编辑解决方案(如下...) 我有一个启动画面,它被打包到它自己的 jar 中。它有效。 我可以通过以下方式从另一个 java 应用程序内部调用 Splash.jar: Desktop.getDesk
什么是创建像 PageFlakes 或 iGoogle 这样的门户网站的好框架/包? ?我们希望创建一个为员工提供 HR 服务的员工/HR 门户,但我们也需要一种足够灵活的产品,以便我们可以使用它来为
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
如何将 solr 与 heritrix 集成? 我想使用 heritrix 归档一个站点,然后使用 solr 在本地索引和搜索该文件。 谢谢 最佳答案 使用 Solr 进行索引的问题在于它是一个纯文本
完整日历不包含工作时间功能选项(在任何一天的议程 View 中选择第一行和最后一行 - 例如公司不工作)。我做到了类似的事情: viewDisplay: function(view){
我是一名优秀的程序员,十分优秀!