小编Ank*_*kur的帖子

synchronized方法与synchronized块

如果我有以下代码

class SomeClass {    
...
public synchronized methodA() {
....
}

public synchronized methodB(){
....
}
}
Run Code Online (Sandbox Code Playgroud)

这将在'this'对象上同步.
但是,如果我的主要目标是确保多个线程不同时使用methodA(或methodB),但是它们可以同时使用methodA和methodB,
那么这种设计是否有限制?因为这里thread1锁定对象(与对象关联的监视对象)以运行methodA但同时thread2也在等待对象锁,即使methodA和methodB可以并发运行.
这种理解是否正确?

如果是,这是我们在私有虚拟对象上使用synchronized块的情况,以便methodA和methodB可以与不同的线程并行运行,但不能与不同线程的methodA(或methodB)并行运行.
谢谢.

java concurrency

4
推荐指数
1
解决办法
1500
查看次数

TreeSet如何检查重复项

我正在检查TreeSet如何检查重复元素并具有以下代码

  import java.util.*;

  public class TreeDemo{

    public static void main(String[] args)
        {
            new TreeDemo().go();
        }

    public void go()
    {
        Song s1 = new Song("song1","artist1");
        Song s2 = new Song("song2","artist2");
        Song s3 = new Song("song3","artist3");
        Song s4 = new Song("song3","artist3");

        Set<Song> tree = new TreeSet<Song>();

        tree.add(s1);
        tree.add(s2);
        tree.add(s3);
        tree.add(s4);

        System.out.println(tree);

    }
}

class Song implements Comparable<Song>{
    private String title;
    private String artist;

    public Song(String t, String a)
    {
        title=t;
        artist=a;
    }

    public String getTitle(){
        return title; 
    }

    public int compareTo(Song s){ …
Run Code Online (Sandbox Code Playgroud)

java generics

4
推荐指数
1
解决办法
9155
查看次数

std :: string一个容器

std :: string是标准c ++库中的容器类,仅限于保存char元素吗?

c++ containers

3
推荐指数
2
解决办法
1863
查看次数

链接列表算法查找最多可添加10的对

你能建议一个算法,找到链接列表中所有节点对,加起来就是10.我想出了以下内容.

算法:比较每个节点,从第二个节点开始,每个节点从头节点开始直到前一个节点(比较当前节点之前)并报告所有这些对.

我认为这个算法应该可行,但它当然不是具有O(n2)复杂度的最有效算法.

任何人都可以暗示一种更有效的解决方案(可能需要线性时间).这种解决方案可以使用附加或临时节点.

puzzle linked-list data-structures

2
推荐指数
1
解决办法
2443
查看次数

复制构造函数的参数选择

我最近在接受采访时询问了复制构造函数的参数.
[编辑]作为实现复制构造函数功能的C++语言的设计者,为什么要在const指针的const指针上选择常量引用参数.

我有一些想法,因为指针可以分配给NULL,这可能在复制构造函数中没有意义(语义上)以及指针变量是一个独立的对象(在效率方面可能不太好)而引用只是实际对象的别名(因此是传递对象的更好方法).
还有其他想法吗?

c++ pointers reference copy-constructor

1
推荐指数
1
解决办法
884
查看次数

在C中使用"extern"存储类说明符

以下extern说明符的示例用法如何表现.

我们在文件one.c和two.c中都有一个全局变量int x.我们想在three.c中使用它们所以在three.c中声明了这个变量as

extern int x;

编译和链接这些文件时会发生什么?

我的答案是:所有这些文件的编译应该成功,但是由于x的多个声明,链接器应该在链接时标记错误.C++中的行为会有什么不同吗?

这些是在C和C++中同时从两个文件引用int x(在three.c中)的任何方式.在C++中,我想我们可以使用命名空间来实现这一点.对?

c c++ extern

1
推荐指数
1
解决办法
1664
查看次数

在Linux上实现pthread_create

Linux上的一个资源提到使用克隆系统调用实现pthread-create,而不是基于其他基于unix的平台(在其他方面实现相同).
这意味着在linux下,使用pthread_create从同一进程创建的两个线程将具有不同的父进程ID.

$ ./a.out
new thread:  pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)  
Run Code Online (Sandbox Code Playgroud)

题

  • 虽然克隆系统调用创建了一个子进程,可以共享其父进程执行上下文的可配置数量(例如文件描述符和内存),但在我看来,在所有实现中,这可能不是最有效的.在Linux下,对于从pthread_create创建的每个线程都有相应的进程(虽然它会与其他进程共享资源)?这种解释是否正确?

unix pthreads

0
推荐指数
1
解决办法
2462
查看次数

调整大小时的relloc行为

当relloc必须将分配的内存大小调整为更大的大小时,它是如何表现的,并且必须在单独的内存区域中完成,因为所请求的内存量可以在适当的位置调整大小.原始内存是否由relloc自动解除分配(我会这么认为)或者必须由程序员完成(不太可能)?

c memory-management

0
推荐指数
1
解决办法
1055
查看次数

向量问题的算法

什么是下面提到的问题的最佳算法.

打印出树的名称和生成的实现方法PrintFamilyTree()
输出应该类似于
名称:Jan生成:0
名称:Mike生成:1
名称:Greg生成:2
名称:Carol:生成:2
名称:Peter生成:3
名称:Marcia Generation:3
名称:Bobby Generation:1

class Human : public std::vector<Human *>
{
public:
Human(const std::string &name) : m_Name(name) {};
virtual void PrintFamilyTree(const short &generation = 0) const;
protected:
std::string m_Name;
};

class Male: public Human
{
public:
Male(const std::string &name) : Human(name) {};
};

class Female: public Human
{
public:
Female(const std::string &name) : Human(name) {};
};

void main()
{
Male m1("Mike"), m2("Greg"), m3("Peter"), m4("Bobby");
Female f1("Carol"), f2("Marcia"), f3("Jan");

m1.push_back(&m2);
f1.push_back(&m3);
f1.push_back(&f2);
m1.push_back(&f1); …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
140
查看次数